diff --git a/.gitignore b/.gitignore
index f804789..b8fb366 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,6 @@ ios/Flutter/flutter_export_environment.sh
.flutter-plugins-dependencies
windows/window_configuration.cpp_copy
lib/generated_plugin_registrant.dart
+windows/flutter/generated_plugins.cmake
+test_driver/generic/generic_test.dart
+linux/flutter/generated_plugins.cmake
diff --git a/README.md b/README.md
index e6eb1d4..cab9071 100644
--- a/README.md
+++ b/README.md
@@ -7,13 +7,13 @@ Available as a [webpage](https://flutter-animations-cheat-sheet.codemagic.app/#/
The content of the page is [searchable](https://flutter-animations-cheat-sheet.codemagic.app/#/content).
# Building
-Last tested version of Flutter that works with this repo is `1.19.0-4.1.pre`:
- * **Important**: Use `version` otherwise desktop won't be picked up: `1.19.0-4.1.pre`
+Last tested version of Flutter that works with this repo is `1.23.0-18.1.pre`:
+ * **Important**: You cannot be on beta/stable channel to run flutter desktop - check out how [to switch to a specific version](https://tomek-polanski.medium.com/running-flutter-desktop-on-stable-channel-c2ee38157e7b).
## Building for Web
-Upgrade flutter to minimum `1.19.0-4.1.pre`, enable web compilation and run:
+Upgrade flutter to minimum `1.23.0-18.1.pre`, enable web compilation and run:
```
-flutter version 1.19.0-4.1.pre
+flutter version 1.23.0-18.1.pre
flutter config --enable-web
flutter run -d chrome -v
```
diff --git a/android/.gitignore b/android/.gitignore
index bc2100d..0a741cb 100644
--- a/android/.gitignore
+++ b/android/.gitignore
@@ -5,3 +5,7 @@ gradle-wrapper.jar
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 28550f4..b956483 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -22,10 +22,15 @@ if (flutterVersionName == null) {
}
apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
- compileSdkVersion 28
+ compileSdkVersion 29
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
lintOptions {
disable 'InvalidPackage'
@@ -35,10 +40,9 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.animation_cheat_page"
minSdkVersion 16
- targetSdkVersion 28
+ targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -55,7 +59,5 @@ flutter {
}
dependencies {
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index d599904..cc8fbd1 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,33 +1,41 @@
-
-
-
-
+
+ android:name="io.flutter.embedding.android.NormalTheme"
+ android:resource="@style/NormalTheme"
+ />
+
+
+
+
diff --git a/android/app/src/main/java/com/example/animation_cheat_page/MainActivity.java b/android/app/src/main/java/com/example/animation_cheat_page/MainActivity.java
deleted file mode 100644
index 02c8af7..0000000
--- a/android/app/src/main/java/com/example/animation_cheat_page/MainActivity.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example.animation_cheat_page;
-
-import android.os.Bundle;
-import io.flutter.app.FlutterActivity;
-import io.flutter.plugins.GeneratedPluginRegistrant;
-
-public class MainActivity extends FlutterActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- GeneratedPluginRegistrant.registerWith(this);
- }
-}
diff --git a/android/build.gradle b/android/build.gradle
index bb8a303..3100ad2 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,11 +1,13 @@
buildscript {
+ ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.2.1'
+ classpath 'com.android.tools.build:gradle:3.5.0'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/android/gradle.properties b/android/gradle.properties
index 1441b1d..94adc3a 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
-
-android.enableR8=true
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 2819f02..296b146 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
diff --git a/android/settings.gradle b/android/settings.gradle
index 5a2f14f..44e62bc 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -1,15 +1,11 @@
include ':app'
-def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
+def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
+def properties = new Properties()
-def plugins = new Properties()
-def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
-if (pluginsFile.exists()) {
- pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
-}
+assert localPropertiesFile.exists()
+localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
-plugins.each { name, path ->
- def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
- include ":$name"
- project(":$name").projectDir = pluginDirectory
-}
+def flutterSdkPath = properties.getProperty("flutter.sdk")
+assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
diff --git a/lib/generic/not_found_page.dart b/lib/generic/not_found_page.dart
index 8d9c4e7..5dee495 100644
--- a/lib/generic/not_found_page.dart
+++ b/lib/generic/not_found_page.dart
@@ -11,7 +11,6 @@ class NotFoundPage extends StatelessWidget {
child: Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
mainAxisAlignment: MainAxisAlignment.center,
- textBaseline: TextBaseline.alphabetic,
children: [
Text(
'0x194',
diff --git a/lib/shared/ui/new_section.dart b/lib/shared/ui/new_section.dart
index 90ac60e..dd058e9 100644
--- a/lib/shared/ui/new_section.dart
+++ b/lib/shared/ui/new_section.dart
@@ -42,7 +42,6 @@ class NewSection extends StatelessWidget {
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
- textBaseline: TextBaseline.alphabetic,
children: [
const NewLabel(),
Text(
diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt
index d5dec13..c6df3e0 100644
--- a/linux/CMakeLists.txt
+++ b/linux/CMakeLists.txt
@@ -2,10 +2,11 @@ cmake_minimum_required(VERSION 3.10)
project(runner LANGUAGES CXX)
set(BINARY_NAME "animation_cheat_page")
+set(APPLICATION_ID "com.example.animation_cheat_page")
cmake_policy(SET CMP0063 NEW)
-set(CMAKE_INSTALL_RPATH "\$ORIGIN")
+set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
# Configure build options.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
@@ -28,15 +29,30 @@ set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
# Flutter library and tool build rules.
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}")
+
# Application build
add_executable(${BINARY_NAME}
"main.cc"
- "window_configuration.cc"
+ "my_application.cc"
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
)
apply_standard_settings(${BINARY_NAME})
-target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
+target_link_libraries(${BINARY_NAME} PRIVATE flutter)
+target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
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.
@@ -51,9 +67,8 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
endif()
-# BundleUtilities doesn't re-copy changed files, so start with a clean build
-# bundle directory every time.
-INSTALL(CODE "
+# Start with a clean build bundle directory every time.
+install(CODE "
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
" COMPONENT Runtime)
@@ -63,28 +78,29 @@ set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
COMPONENT Runtime)
-file(GLOB FLUTTER_PLUGIN_DIRS "${PROJECT_BINARY_DIR}/plugins/*")
-
-INSTALL(CODE "
- include(BundleUtilities)
- fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${BINARY_NAME}\" \"\"
- \"${FLUTTER_PLUGIN_DIRS};${FLUTTER_LIBRARY_DIR}\")
- " COMPONENT Runtime)
+install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ COMPONENT Runtime)
-INSTALL(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+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()
+
# 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 "
+install(CODE "
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
" COMPONENT Runtime)
-INSTALL(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
+install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
-# Install the lib directory on non-Debug builds only.
-if (NOT CMAKE_BUILD_TYPE MATCHES "Debug")
- INSTALL(DIRECTORY "${PROJECT_BUILD_DIR}/lib"
- DESTINATION "${CMAKE_INSTALL_PREFIX}" 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/linux/flutter/.template_version b/linux/flutter/.template_version
deleted file mode 100644
index e440e5c..0000000
--- a/linux/flutter/.template_version
+++ /dev/null
@@ -1 +0,0 @@
-3
\ No newline at end of file
diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt
index 902cfa4..4f48a7c 100644
--- a/linux/flutter/CMakeLists.txt
+++ b/linux/flutter/CMakeLists.txt
@@ -7,7 +7,6 @@ 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_glfw")
# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
# which isn't available in 3.10.
@@ -20,70 +19,56 @@ function(list_prepend LIST_NAME PREFIX)
endfunction()
# === Flutter Library ===
-set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_glfw.so")
+# 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)
+pkg_check_modules(BLKID REQUIRED IMPORTED_TARGET blkid)
+
+set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
# Published to parent scope for install step.
-set(FLUTTER_LIBRARY_DIR "${EPHEMERAL_DIR}" PARENT_SCOPE)
+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
- "flutter_export.h"
- "flutter_glfw.h"
- "flutter_messenger.h"
- "flutter_plugin_registrar.h"
+ "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(FLUTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/")
+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}")
-add_dependencies(flutter flutter_assemble)
-
-# === Wrapper ===
-list(APPEND CPP_WRAPPER_SOURCES_CORE
- "engine_method_result.cc"
- "standard_codec.cc"
-)
-list_prepend(CPP_WRAPPER_SOURCES_CORE "${WRAPPER_ROOT}/")
-list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
- "plugin_registrar.cc"
-)
-list_prepend(CPP_WRAPPER_SOURCES_PLUGIN "${WRAPPER_ROOT}/")
-list(APPEND CPP_WRAPPER_SOURCES_APP
- "flutter_engine.cc"
- "flutter_window_controller.cc"
-)
-list_prepend(CPP_WRAPPER_SOURCES_APP "${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"
+target_link_libraries(flutter INTERFACE
+ PkgConfig::GTK
+ PkgConfig::GLIB
+ PkgConfig::GIO
+ PkgConfig::BLKID
)
-add_dependencies(flutter_wrapper_app flutter_assemble)
+add_dependencies(flutter flutter_assemble)
# === Flutter tool backend ===
# _phony_ is a non-existent file to force this command to run every time,
@@ -91,8 +76,6 @@ add_dependencies(flutter_wrapper_app flutter_assemble)
# flutter tool.
add_custom_command(
OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
- ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
- ${CPP_WRAPPER_SOURCES_APP}
${CMAKE_CURRENT_BINARY_DIR}/_phony_
COMMAND ${CMAKE_COMMAND} -E env
${FLUTTER_TOOL_ENVIRONMENT}
@@ -102,7 +85,4 @@ add_custom_command(
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/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake
deleted file mode 100644
index 46a77c0..0000000
--- a/linux/flutter/generated_plugins.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-list(APPEND FLUTTER_PLUGIN_LIST
-)
-
-foreach(plugin ${FLUTTER_PLUGIN_LIST})
- add_subdirectory(flutter\ephemeral\.plugin_symlinks/${plugin}/linux plugins/${plugin})
- target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
-endforeach(plugin)
diff --git a/linux/main.cc b/linux/main.cc
index 5211469..058e617 100644
--- a/linux/main.cc
+++ b/linux/main.cc
@@ -1,64 +1,10 @@
-#include
-#include
-#include
-#include
+#include "my_application.h"
-#include
-#include
-#include
-#include
+int main(int argc, char** argv) {
+ // Only X11 is currently supported.
+ // Wayland support is being developed: https://github.com/flutter/flutter/issues/57932.
+ gdk_set_allowed_backends("x11");
-#include "flutter/generated_plugin_registrant.h"
-#include "window_configuration.h"
-
-namespace {
-
-// Runs the application in headless mode, without a window.
-void RunHeadless(const std::string& icu_data_path,
- const std::string& assets_path,
- const std::vector& arguments,
- const std::string& aot_library_path) {
- flutter::FlutterEngine engine;
- engine.Start(icu_data_path, assets_path, arguments, aot_library_path);
- RegisterPlugins(&engine);
- while (true) {
- engine.RunEventLoopWithTimeout();
- }
-}
-
-} // namespace
-
-int main(int argc, char **argv) {
- std::string data_directory = "data";
- std::string assets_path = data_directory + "/flutter_assets";
- std::string icu_data_path = data_directory + "/icudtl.dat";
-
- std::string lib_directory = "lib";
- std::string aot_library_path = lib_directory + "/libapp.so";
-
- // Arguments for the Flutter Engine.
- std::vector arguments;
-
- flutter::FlutterWindowController flutter_controller(icu_data_path);
- flutter::WindowProperties window_properties = {};
- window_properties.title = kFlutterWindowTitle;
- window_properties.width = kFlutterWindowWidth;
- window_properties.height = kFlutterWindowHeight;
-
- // Start the engine.
- if (!flutter_controller.CreateWindow(window_properties, assets_path,
- arguments, aot_library_path)) {
- if (getenv("DISPLAY") == nullptr) {
- std::cout << "No DISPLAY; falling back to headless mode." << std::endl;
- RunHeadless(icu_data_path, assets_path, arguments, aot_library_path);
- return EXIT_SUCCESS;
- }
- return EXIT_FAILURE;
- }
- RegisterPlugins(&flutter_controller);
-
- // Run until the window is closed.
- while (flutter_controller.RunEventLoopWithTimeout()) {
- }
- return EXIT_SUCCESS;
+ g_autoptr(MyApplication) app = my_application_new();
+ return g_application_run(G_APPLICATION(app), argc, argv);
}
diff --git a/linux/my_application.cc b/linux/my_application.cc
new file mode 100644
index 0000000..c3fd43b
--- /dev/null
+++ b/linux/my_application.cc
@@ -0,0 +1,46 @@
+#include "my_application.h"
+
+#include
+
+#include "flutter/generated_plugin_registrant.h"
+
+struct _MyApplication {
+ GtkApplication parent_instance;
+};
+
+G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
+
+// Implements GApplication::activate.
+static void my_application_activate(GApplication* application) {
+ GtkWindow* window =
+ GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
+ GtkHeaderBar *header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
+ gtk_widget_show(GTK_WIDGET(header_bar));
+ gtk_header_bar_set_title(header_bar, "animation_cheat_page");
+ gtk_header_bar_set_show_close_button(header_bar, TRUE);
+ gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
+ gtk_window_set_default_size(window, 1280, 720);
+ gtk_widget_show(GTK_WIDGET(window));
+
+ g_autoptr(FlDartProject) project = fl_dart_project_new();
+
+ FlView* view = fl_view_new(project);
+ gtk_widget_show(GTK_WIDGET(view));
+ gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
+
+ fl_register_plugins(FL_PLUGIN_REGISTRY(view));
+
+ gtk_widget_grab_focus(GTK_WIDGET(view));
+}
+
+static void my_application_class_init(MyApplicationClass* klass) {
+ G_APPLICATION_CLASS(klass)->activate = my_application_activate;
+}
+
+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,
+ nullptr));
+}
diff --git a/linux/my_application.h b/linux/my_application.h
new file mode 100644
index 0000000..72271d5
--- /dev/null
+++ 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/linux/window_configuration.cc b/linux/window_configuration.cc
deleted file mode 100644
index b36b0a5..0000000
--- a/linux/window_configuration.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "window_configuration.h"
-
-const char *kFlutterWindowTitle = "Flutter Animations";
-const unsigned int kFlutterWindowWidth = 500;
-const unsigned int kFlutterWindowHeight = 900;
diff --git a/linux/window_configuration.h b/linux/window_configuration.h
deleted file mode 100644
index 5de7011..0000000
--- a/linux/window_configuration.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef WINDOW_CONFIGURATION_
-#define WINDOW_CONFIGURATION_
-
-// This is a temporary approach to isolate common customizations from main.cpp,
-// where the APIs are still in flux. This should simplify re-creating the
-// runner while preserving local changes.
-//
-// Longer term there should be simpler configuration options for common
-// customizations like this, without requiring native code changes.
-
-extern const char *kFlutterWindowTitle;
-extern const unsigned int kFlutterWindowWidth;
-extern const unsigned int kFlutterWindowHeight;
-
-#endif // WINDOW_CONFIGURATION_
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index 270f191..74bda7d 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -280,7 +280,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n";
+ shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
/* End PBXShellScriptBuildPhase section */
diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig
index 430e132..c186487 100644
--- a/macos/Runner/Configs/AppInfo.xcconfig
+++ b/macos/Runner/Configs/AppInfo.xcconfig
@@ -5,10 +5,10 @@
// 'flutter create' template.
// The application's name. By default this is also the title of the Flutter window.
-PRODUCT_NAME = Flutter Animations
+PRODUCT_NAME = animation_cheat_page
// The application's bundle identifier
PRODUCT_BUNDLE_IDENTIFIER = com.example.animationCheatPage
// The copyright displayed in application information
-PRODUCT_COPYRIGHT = Copyright © 2019 Tomek. All rights reserved.
+PRODUCT_COPYRIGHT = Copyright © 2020 com.example. All rights reserved.
diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements
index 78c36cf..dddb8a3 100644
--- a/macos/Runner/DebugProfile.entitlements
+++ b/macos/Runner/DebugProfile.entitlements
@@ -3,12 +3,10 @@
com.apple.security.app-sandbox
-
+
com.apple.security.cs.allow-jit
com.apple.security.network.server
- com.apple.security.network.client
-
diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements
index ee95ab7..852fa1a 100644
--- a/macos/Runner/Release.entitlements
+++ b/macos/Runner/Release.entitlements
@@ -4,7 +4,5 @@
com.apple.security.app-sandbox
- com.apple.security.network.client
-
diff --git a/test_driver/generic/generic_test.dart b/test_driver/generic/generic_test.dart
deleted file mode 100644
index 9f40fd8..0000000
--- a/test_driver/generic/generic_test.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-// ignore_for_file: directives_ordering
-/// This file is autogenerated and should not be committed to source control
-
-import '../../test_driver/curves_test.dart' as test_driver_curves;
-import '../../test_driver/root_test.dart' as test_driver_root;
-import '../../test_driver/sliver_fill_remaining_test.dart' as test_driver_sliver_fill_remaining;
-
-void main(List args) {
- test_driver_curves.main(args);
- test_driver_root.main(args);
- test_driver_sliver_fill_remaining.main(args);
-}
diff --git a/windows/AppConfiguration.props b/windows/AppConfiguration.props
deleted file mode 100644
index f462811..0000000
--- a/windows/AppConfiguration.props
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- animation_cheat_page
-
-
diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt
new file mode 100644
index 0000000..1d2e82f
--- /dev/null
+++ b/windows/CMakeLists.txt
@@ -0,0 +1,95 @@
+cmake_minimum_required(VERSION 3.15)
+project(animation_cheat_page LANGUAGES CXX)
+
+set(BINARY_NAME "animation_cheat_page")
+
+cmake_policy(SET CMP0063 NEW)
+
+set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
+
+# Configure build options.
+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()
+
+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.
+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()
+
+set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
+
+# Flutter library and tool build rules.
+add_subdirectory(${FLUTTER_MANAGED_DIR})
+
+# Application build
+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()
+
+# 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/windows/FlutterBuild.vcxproj b/windows/FlutterBuild.vcxproj
deleted file mode 100644
index 8ef93f9..0000000
--- a/windows/FlutterBuild.vcxproj
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
- Debug
- x64
-
-
- Profile
- x64
-
-
- Release
- x64
-
-
-
- 15.0
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}
- Flutter Build
- 10.0
-
-
-
- v141
- v142
-
-
-
-
-
-
-
-
-
-
-
-
-
- "$(ProjectDir)scripts\prepare_dependencies" $(Configuration)
- Running Flutter backend build
- force_to_run_every_time
-
-
-
-
-
-
-
-
diff --git a/windows/Runner.sln b/windows/Runner.sln
deleted file mode 100644
index 7bfc8e0..0000000
--- a/windows/Runner.sln
+++ /dev/null
@@ -1,43 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29709.97
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Runner", "Runner.vcxproj", "{5A827760-CF8B-408A-99A3-B6C0AD2271E7}"
- ProjectSection(ProjectDependencies) = postProject
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F} = {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Flutter Build", "FlutterBuild.vcxproj", "{6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Flutter Plugins", "Flutter Plugins", "{5C2E738A-1DD3-445A-AAC8-EEB9648DD07C}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Profile|x64 = Profile|x64
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Debug|x64.ActiveCfg = Debug|x64
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Debug|x64.Build.0 = Debug|x64
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Profile|x64.ActiveCfg = Profile|x64
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Profile|x64.Build.0 = Profile|x64
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Release|x64.ActiveCfg = Release|x64
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Release|x64.Build.0 = Release|x64
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}.Debug|x64.ActiveCfg = Debug|x64
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}.Debug|x64.Build.0 = Debug|x64
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}.Profile|x64.ActiveCfg = Profile|x64
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}.Profile|x64.Build.0 = Profile|x64
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}.Release|x64.ActiveCfg = Release|x64
- {6419BF13-6ECD-4CD2-9E85-E566A1F03F8F}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {B8A69CB0-A974-4774-9EBD-1E5EECACD186}
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- EndGlobalSection
-EndGlobal
\ No newline at end of file
diff --git a/windows/Runner.vcxproj b/windows/Runner.vcxproj
deleted file mode 100644
index e9661d7..0000000
--- a/windows/Runner.vcxproj
+++ /dev/null
@@ -1,262 +0,0 @@
-
-
-
-
- Debug
- x64
-
-
- Profile
- x64
-
-
- Release
- x64
-
-
-
- 15.0
- {5A827760-CF8B-408A-99A3-B6C0AD2271E7}
- animation_cheat_page
- 10.0
-
-
-
- Application
- true
- v141
- v142
- Unicode
-
-
- Application
- false
- v141
- v142
- true
- Unicode
-
-
- Application
- false
- v141
- v142
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(ProjectDir)..\build\windows\$(Platform)\$(Configuration)\$(ProjectName)\
- $(ProjectDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(ProjectDir)..\build\windows\$(Platform)\$(Configuration)\$(ProjectName)\
- $(ProjectDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\
-
-
- $(ProjectDir)..\build\windows\$(Platform)\$(Configuration)\$(ProjectName)\
- $(ProjectDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\
-
-
-
- Level4
- Disabled
- true
- true
- $(ProjectDir);$(FLUTTER_EPHEMERAL_DIR);$(FLUTTER_EPHEMERAL_DIR)\cpp_client_wrapper\include;%(AdditionalIncludeDirectories)
- _MBCS;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)
- true
- 4100
-
-
- flutter_windows.dll.lib;%(AdditionalDependencies)
- $(FLUTTER_EPHEMERAL_DIR);$(OutDir)..\Plugins;%(AdditionalLibraryDirectories)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "$(ProjectDir)scripts\bundle_assets_and_deps" "$(FLUTTER_EPHEMERAL_DIR)\" "$(OutputPath)" "$(OutputPath)..\Plugins\" "$(TargetFileName)" "$(Configuration)"
-
-
- Bundling dependencies
- Dummy_Run_Always
-
-
-
-
-
-
- Level4
- MaxSpeed
- true
- true
- true
- true
- $(ProjectDir);$(FLUTTER_EPHEMERAL_DIR);$(FLUTTER_EPHEMERAL_DIR)\cpp_client_wrapper\include;%(AdditionalIncludeDirectories)
- _MBCS;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)
- true
- 4100
-
-
- true
- true
- flutter_windows.dll.lib;%(AdditionalDependencies)
- $(FLUTTER_EPHEMERAL_DIR);$(OutDir)..\Plugins;%(AdditionalLibraryDirectories)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "$(ProjectDir)scripts\bundle_assets_and_deps" "$(FLUTTER_EPHEMERAL_DIR)\" "$(OutputPath)" "$(OutputPath)..\Plugins\" "$(TargetFileName)" "$(Configuration)"
-
-
- Bundling dependencies
- Dummy_Run_Always
-
-
-
-
-
-
- Level4
- MaxSpeed
- true
- true
- true
- true
- $(ProjectDir);$(FLUTTER_EPHEMERAL_DIR);$(FLUTTER_EPHEMERAL_DIR)\cpp_client_wrapper\include;%(AdditionalIncludeDirectories)
- _MBCS;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)
- true
- 4100
-
-
- true
- true
- flutter_windows.dll.lib;%(AdditionalDependencies)
- $(FLUTTER_EPHEMERAL_DIR);$(OutDir)..\Plugins;%(AdditionalLibraryDirectories)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "$(ProjectDir)scripts\bundle_assets_and_deps" "$(FLUTTER_EPHEMERAL_DIR)\" "$(OutputPath)" "$(OutputPath)..\Plugins\" "$(TargetFileName)" "$(Configuration)"
-
-
- Bundling dependencies
- Dummy_Run_Always
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(SolutionDir)
-
-
diff --git a/windows/Runner.vcxproj.filters b/windows/Runner.vcxproj.filters
deleted file mode 100644
index 761db86..0000000
--- a/windows/Runner.vcxproj.filters
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
- {2761a4b5-57b2-4d50-a677-d20ddc17a7f1}
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files\Client Wrapper
-
-
- Source Files\Client Wrapper
-
-
- Source Files\Client Wrapper
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
-
-
-
-
-
- Resource Files
-
-
-
-
- Resource Files
-
-
-
diff --git a/windows/flutter/.template_version b/windows/flutter/.template_version
deleted file mode 100644
index 00750ed..0000000
--- a/windows/flutter/.template_version
+++ /dev/null
@@ -1 +0,0 @@
-3
diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt
new file mode 100644
index 0000000..c7a8c76
--- /dev/null
+++ b/windows/flutter/CMakeLists.txt
@@ -0,0 +1,101 @@
+cmake_minimum_required(VERSION 3.15)
+
+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")
+
+# === 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"
+)
+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"
+ windows-x64 $
+)
+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/windows/flutter/GeneratedPlugins.props b/windows/flutter/GeneratedPlugins.props
deleted file mode 100644
index d3d26c7..0000000
--- a/windows/flutter/GeneratedPlugins.props
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt
new file mode 100644
index 0000000..977e38b
--- /dev/null
+++ b/windows/runner/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.15)
+project(runner LANGUAGES CXX)
+
+add_executable(${BINARY_NAME} WIN32
+ "flutter_window.cpp"
+ "main.cpp"
+ "run_loop.cpp"
+ "utils.cpp"
+ "win32_window.cpp"
+ "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
+ "Runner.rc"
+ "runner.exe.manifest"
+)
+apply_standard_settings(${BINARY_NAME})
+target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
+target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
+target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
+add_dependencies(${BINARY_NAME} flutter_assemble)
diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc
index 5b41a82..e3f896c 100644
--- a/windows/runner/Runner.rc
+++ b/windows/runner/Runner.rc
@@ -54,6 +54,57 @@ END
// remains consistent on all systems.
IDI_APP_ICON ICON "resources\\app_icon.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+#ifdef FLUTTER_BUILD_NUMBER
+#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER
+#else
+#define VERSION_AS_NUMBER 1,0,0
+#endif
+
+#ifdef FLUTTER_BUILD_NAME
+#define VERSION_AS_STRING #FLUTTER_BUILD_NAME
+#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", "A new Flutter project." "\0"
+ VALUE "FileVersion", VERSION_AS_STRING "\0"
+ VALUE "InternalName", "animation_cheat_page" "\0"
+ VALUE "LegalCopyright", "Copyright (C) 2020 com.example. All rights reserved." "\0"
+ VALUE "OriginalFilename", "animation_cheat_page.exe" "\0"
+ VALUE "ProductName", "animation_cheat_page" "\0"
+ VALUE "ProductVersion", VERSION_AS_STRING "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1252
+ END
+END
+
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp
index fe980cf..c422723 100644
--- a/windows/runner/flutter_window.cpp
+++ b/windows/runner/flutter_window.cpp
@@ -1,5 +1,7 @@
#include "flutter_window.h"
+#include
+
#include "flutter/generated_plugin_registrant.h"
FlutterWindow::FlutterWindow(RunLoop* run_loop,
@@ -8,22 +10,55 @@ FlutterWindow::FlutterWindow(RunLoop* run_loop,
FlutterWindow::~FlutterWindow() {}
-void FlutterWindow::OnCreate() {
- Win32Window::OnCreate();
+bool FlutterWindow::OnCreate() {
+ if (!Win32Window::OnCreate()) {
+ return false;
+ }
+
+ RECT frame = GetClientArea();
- // The size here is arbitrary since SetChildContent will resize it.
- flutter_controller_ =
- std::make_unique(100, 100, project_);
- RegisterPlugins(flutter_controller_.get());
- run_loop_->RegisterFlutterInstance(flutter_controller_.get());
+ // 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());
+ run_loop_->RegisterFlutterInstance(flutter_controller_->engine());
SetChildContent(flutter_controller_->view()->GetNativeWindow());
+ return true;
}
void FlutterWindow::OnDestroy() {
if (flutter_controller_) {
- run_loop_->UnregisterFlutterInstance(flutter_controller_.get());
+ run_loop_->UnregisterFlutterInstance(flutter_controller_->engine());
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 opporutunity 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/windows/runner/flutter_window.h b/windows/runner/flutter_window.h
index 4f41e16..b663ddd 100644
--- a/windows/runner/flutter_window.h
+++ b/windows/runner/flutter_window.h
@@ -1,14 +1,14 @@
-#ifndef FLUTTER_WINDOW_H_
-#define FLUTTER_WINDOW_H_
+#ifndef RUNNER_FLUTTER_WINDOW_H_
+#define RUNNER_FLUTTER_WINDOW_H_
#include
#include
+#include
+
#include "run_loop.h"
#include "win32_window.h"
-#include
-
// A window that does nothing but host a Flutter view.
class FlutterWindow : public Win32Window {
public:
@@ -20,8 +20,10 @@ class FlutterWindow : public Win32Window {
protected:
// Win32Window:
- void OnCreate() override;
+ bool OnCreate() override;
void OnDestroy() override;
+ LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
+ LPARAM const lparam) noexcept override;
private:
// The run loop driving events for this window.
@@ -34,4 +36,4 @@ class FlutterWindow : public Win32Window {
std::unique_ptr flutter_controller_;
};
-#endif // FLUTTER_WINDOW_H_
+#endif // RUNNER_FLUTTER_WINDOW_H_
diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp
index 11b48e9..b2bbea4 100644
--- a/windows/runner/main.cpp
+++ b/windows/runner/main.cpp
@@ -5,7 +5,6 @@
#include "flutter_window.h"
#include "run_loop.h"
#include "utils.h"
-#include "window_configuration.h"
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
_In_ wchar_t *command_line, _In_ int show_command) {
@@ -23,9 +22,9 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
flutter::DartProject project(L"data");
FlutterWindow window(&run_loop, project);
- Win32Window::Point origin(kFlutterWindowOriginX, kFlutterWindowOriginY);
- Win32Window::Size size(kFlutterWindowWidth, kFlutterWindowHeight);
- if (!window.CreateAndShow(kFlutterWindowTitle, origin, size)) {
+ Win32Window::Point origin(10, 10);
+ Win32Window::Size size(1280, 720);
+ if (!window.CreateAndShow(L"animation_cheat_page", origin, size)) {
return EXIT_FAILURE;
}
window.SetQuitOnClose(true);
diff --git a/windows/runner/run_loop.cpp b/windows/runner/run_loop.cpp
index f91d6d4..2d6636a 100644
--- a/windows/runner/run_loop.cpp
+++ b/windows/runner/run_loop.cpp
@@ -1,9 +1,6 @@
#include "run_loop.h"
-#include
-// Don't stomp std::min/std::max
-#undef max
-#undef min
+#include
#include
@@ -47,20 +44,19 @@ void RunLoop::Run() {
}
void RunLoop::RegisterFlutterInstance(
- flutter::FlutterViewController* flutter_instance) {
+ flutter::FlutterEngine* flutter_instance) {
flutter_instances_.insert(flutter_instance);
}
void RunLoop::UnregisterFlutterInstance(
- flutter::FlutterViewController* flutter_instance) {
+ flutter::FlutterEngine* flutter_instance) {
flutter_instances_.erase(flutter_instance);
}
RunLoop::TimePoint RunLoop::ProcessFlutterMessages() {
TimePoint next_event_time = TimePoint::max();
- for (auto flutter_controller : flutter_instances_) {
- std::chrono::nanoseconds wait_duration =
- flutter_controller->ProcessMessages();
+ for (auto instance : flutter_instances_) {
+ std::chrono::nanoseconds wait_duration = instance->ProcessMessages();
if (wait_duration != std::chrono::nanoseconds::max()) {
next_event_time =
std::min(next_event_time, TimePoint::clock::now() + wait_duration);
diff --git a/windows/runner/run_loop.h b/windows/runner/run_loop.h
index 442a58e..000d362 100644
--- a/windows/runner/run_loop.h
+++ b/windows/runner/run_loop.h
@@ -1,7 +1,7 @@
-#ifndef RUN_LOOP_H_
-#define RUN_LOOP_H_
+#ifndef RUNNER_RUN_LOOP_H_
+#define RUNNER_RUN_LOOP_H_
-#include
+#include
#include
#include
@@ -22,11 +22,11 @@ class RunLoop {
// Registers the given Flutter instance for event servicing.
void RegisterFlutterInstance(
- flutter::FlutterViewController* flutter_instance);
+ flutter::FlutterEngine* flutter_instance);
// Unregisters the given Flutter instance from event servicing.
void UnregisterFlutterInstance(
- flutter::FlutterViewController* flutter_instance);
+ flutter::FlutterEngine* flutter_instance);
private:
using TimePoint = std::chrono::steady_clock::time_point;
@@ -34,7 +34,7 @@ class RunLoop {
// Processes all currently pending messages for registered Flutter instances.
TimePoint ProcessFlutterMessages();
- std::set flutter_instances_;
+ std::set flutter_instances_;
};
-#endif // RUN_LOOP_H_
+#endif // RUNNER_RUN_LOOP_H_
diff --git a/windows/runner/utils.h b/windows/runner/utils.h
index d247a66..d792603 100644
--- a/windows/runner/utils.h
+++ b/windows/runner/utils.h
@@ -1,8 +1,8 @@
-#ifndef CONSOLE_UTILS_H_
-#define CONSOLE_UTILS_H_
+#ifndef RUNNER_UTILS_H_
+#define RUNNER_UTILS_H_
// Creates a console for the process, and redirects stdout and stderr to
// it for both the runner and the Flutter library.
void CreateAndAttachConsole();
-#endif // CONSOLE_UTILS_H_
+#endif // RUNNER_UTILS_H_
diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp
index 677a9a6..efc3eb9 100644
--- a/windows/runner/win32_window.cpp
+++ b/windows/runner/win32_window.cpp
@@ -122,9 +122,11 @@ bool Win32Window::CreateAndShow(const std::wstring& title,
Scale(size.width, scale_factor), Scale(size.height, scale_factor),
nullptr, nullptr, GetModuleHandle(nullptr), this);
- OnCreate();
+ if (!window) {
+ return false;
+ }
- return window != nullptr;
+ return OnCreate();
}
// static
@@ -152,13 +154,6 @@ Win32Window::MessageHandler(HWND hwnd,
UINT const message,
WPARAM const wparam,
LPARAM const lparam) noexcept {
- auto window =
- reinterpret_cast(GetWindowLongPtr(hwnd, GWLP_USERDATA));
-
- if (window == nullptr) {
- return 0;
- }
-
switch (message) {
case WM_DESTROY:
window_handle_ = nullptr;
@@ -179,8 +174,7 @@ Win32Window::MessageHandler(HWND hwnd,
return 0;
}
case WM_SIZE:
- RECT rect;
- GetClientRect(hwnd, &rect);
+ RECT rect = GetClientArea();
if (child_content_ != nullptr) {
// Size and position the child window.
MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,
@@ -193,11 +187,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus(child_content_);
}
return 0;
-
- // Messages that are directly forwarded to embedding.
- case WM_FONTCHANGE:
- SendMessage(child_content_, WM_FONTCHANGE, NULL, NULL);
- return 0;
}
return DefWindowProc(window_handle_, message, wparam, lparam);
@@ -223,8 +212,7 @@ Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
void Win32Window::SetChildContent(HWND content) {
child_content_ = content;
SetParent(content, window_handle_);
- RECT frame;
- GetClientRect(window_handle_, &frame);
+ RECT frame = GetClientArea();
MoveWindow(content, frame.left, frame.top, frame.right - frame.left,
frame.bottom - frame.top, true);
@@ -232,6 +220,12 @@ void Win32Window::SetChildContent(HWND content) {
SetFocus(child_content_);
}
+RECT Win32Window::GetClientArea() {
+ RECT frame;
+ GetClientRect(window_handle_, &frame);
+ return frame;
+}
+
HWND Win32Window::GetHandle() {
return window_handle_;
}
@@ -240,8 +234,9 @@ void Win32Window::SetQuitOnClose(bool quit_on_close) {
quit_on_close_ = quit_on_close;
}
-void Win32Window::OnCreate() {
+bool Win32Window::OnCreate() {
// No-op; provided for subclasses.
+ return true;
}
void Win32Window::OnDestroy() {
diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h
index 5cbb5d5..17ba431 100644
--- a/windows/runner/win32_window.h
+++ b/windows/runner/win32_window.h
@@ -1,8 +1,7 @@
-#ifndef WIN32_WINDOW_H_
-#define WIN32_WINDOW_H_
+#ifndef RUNNER_WIN32_WINDOW_H_
+#define RUNNER_WIN32_WINDOW_H_
-#include
-#include
+#include
#include
#include
@@ -52,6 +51,9 @@ class Win32Window {
// 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
@@ -62,8 +64,8 @@ class Win32Window {
LPARAM const lparam) noexcept;
// Called when CreateAndShow is called, allowing subclass window-related
- // setup.
- virtual void OnCreate();
+ // setup. Subclasses should return false if setup fails.
+ virtual bool OnCreate();
// Called when Destroy is called.
virtual void OnDestroy();
@@ -93,4 +95,4 @@ class Win32Window {
HWND child_content_ = nullptr;
};
-#endif // WIN32_WINDOW_H_
+#endif // RUNNER_WIN32_WINDOW_H_
diff --git a/windows/runner/window_configuration.cpp b/windows/runner/window_configuration.cpp
deleted file mode 100644
index 8973b78..0000000
--- a/windows/runner/window_configuration.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "window_configuration.h"
-
-const wchar_t* kFlutterWindowTitle = L"Flutter Animations";
-const unsigned int kFlutterWindowOriginX = 10;
-const unsigned int kFlutterWindowOriginY = 10;
-const unsigned int kFlutterWindowWidth = 500;
-const unsigned int kFlutterWindowHeight = 900;
diff --git a/windows/runner/window_configuration.h b/windows/runner/window_configuration.h
deleted file mode 100644
index ea5cead..0000000
--- a/windows/runner/window_configuration.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef WINDOW_CONFIGURATION_
-#define WINDOW_CONFIGURATION_
-
-// This is a temporary approach to isolate changes that people are likely to
-// make to main.cpp, where the APIs are still in flux. This will reduce the
-// need to resolve conflicts or re-create changes slightly differently every
-// time the Windows Flutter API surface changes.
-//
-// Longer term there should be simpler configuration options for common
-// customizations like this, without requiring native code changes.
-
-extern const wchar_t* kFlutterWindowTitle;
-extern const unsigned int kFlutterWindowOriginX;
-extern const unsigned int kFlutterWindowOriginY;
-extern const unsigned int kFlutterWindowWidth;
-extern const unsigned int kFlutterWindowHeight;
-
-#endif // WINDOW_CONFIGURATION_
diff --git a/windows/scripts/bundle_assets_and_deps.bat b/windows/scripts/bundle_assets_and_deps.bat
deleted file mode 100644
index 9efa28f..0000000
--- a/windows/scripts/bundle_assets_and_deps.bat
+++ /dev/null
@@ -1,44 +0,0 @@
-@echo off
-
-set FLUTTER_CACHE_DIR=%~1
-set BUNDLE_DIR=%~2
-set PLUGIN_DIR=%~3
-set EXE_NAME=%~4
-set BUILD_MODE=%~5
-
-set DATA_DIR=%BUNDLE_DIR%data
-
-if not exist "%DATA_DIR%" call mkdir "%DATA_DIR%"
-if %errorlevel% neq 0 exit /b %errorlevel%
-
-:: Write the executable name to the location expected by the Flutter tool.
-echo %EXE_NAME%>"%FLUTTER_CACHE_DIR%exe_filename"
-
-:: Copy the Flutter assets to the data directory.
-set FLUTTER_BUILD_DIR=%~dp0..\..\build\
-set ASSET_DIR_NAME=flutter_assets
-set TARGET_ASSET_DIR=%DATA_DIR%\%ASSET_DIR_NAME%
-if exist "%TARGET_ASSET_DIR%" call rmdir /s /q "%TARGET_ASSET_DIR%"
-if %errorlevel% neq 0 exit /b %errorlevel%
-call xcopy /s /e /i /q "%FLUTTER_BUILD_DIR%%ASSET_DIR_NAME%" "%TARGET_ASSET_DIR%"
-if %errorlevel% neq 0 exit /b %errorlevel%
-
-:: Copy the icudtl.dat file from the Flutter tree to the data directory.
-call xcopy /y /d /q "%FLUTTER_CACHE_DIR%icudtl.dat" "%DATA_DIR%"
-if %errorlevel% neq 0 exit /b %errorlevel%
-
-:: For non-debug modes, copy app.so into the data directory.
-if not %BUILD_MODE% == "Debug" (
- call xcopy /y /d /q "%FLUTTER_BUILD_DIR%windows\app.so" "%DATA_DIR%"
- if %errorlevel% neq 0 exit /b %errorlevel%
-)
-
-:: Copy the Flutter DLL to the target location.
-call xcopy /y /d /q "%FLUTTER_CACHE_DIR%flutter_windows.dll" "%BUNDLE_DIR%"
-if %errorlevel% neq 0 exit /b %errorlevel%
-
-:: Copy any Plugin DLLs to the target location.
-if exist "%PLUGIN_DIR%" (
- call xcopy /y /d /q "%PLUGIN_DIR%"*.dll "%BUNDLE_DIR%"
- if %errorlevel% neq 0 exit /b %errorlevel%
-)
diff --git a/windows/scripts/prepare_dependencies.bat b/windows/scripts/prepare_dependencies.bat
deleted file mode 100644
index d05238b..0000000
--- a/windows/scripts/prepare_dependencies.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-
-:: Run flutter tool backend.
-set BUILD_MODE=%~1
-"%FLUTTER_ROOT%\packages\flutter_tools\bin\tool_backend" windows-x64 %BUILD_MODE%