Flutter window_utils 未编译代码并给出 CMakeLists.txt 文件错误
Flutter window_utils not compiling code and giving CMakeLists.txt file error
我在我的 flutter 桌面应用程序中使用 window_utils flutter 插件。当我 运行 我的应用程序出现此错误 Image1.
这是我的 pubspec.yaml 代码 Image2。
https://pub.dev/documentation/window_utils/latest/
我试过这个插件的所有版本,但没有用。谁能帮我看看这是什么问题以及如何解决。
问题在于,在插件构建系统和 API 完全稳定之前,该插件是针对 Flutter 桌面支持的非常早期的预发布版本编写的。不幸的是,尽管当时明确警告不要这样做,但它还是发布了,然后,可以预见的是,当下一个重大变化发生时,它很快就停止工作了。由于在那之后它没有更新,它从那以后就再也没有用过。
除了为插件系统的最终版本(包括完全替换其构建系统)分叉和重写它,或者使用不同的插件之外,没有办法解决它。
虽然插件已过期,但 Windows 的 C++ 代码仍然可以工作。
您可以在 pub.dartlang.org\window_utils-1.0.2\windows
找到源代码。
自己用最新的Flutter SDK新建一个插件项目:
flutter create --template=plugin --platforms=windows test
在lib.dart
中定义一个Flutter方法:
static Future<void> hideTitleBar() async {
await _channel.invokeMethod('hideTitleBar');
}
将 C++ 代码添加到 *.cpp 文件:
void FlutterBarcodeSdkPlugin::HandleMethodCall(
const flutter::MethodCall<flutter::EncodableValue> &method_call,
std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (method_call.method_name().compare("hideTitleBar") == 0)
{
HWND hWnd = GetActiveWindow();
SetMenu(hWnd, NULL);
LONG lStyle = GetWindowLong(hWnd, GWL_STYLE);
// lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU);
// lStyle &= WS_DLGFRAME;
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU | WS_DLGFRAME);
SetWindowLong(hWnd, GWL_STYLE, lStyle);
LONG flags = SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER;
SetWindowPos(hWnd, NULL, 0, 0, 0, 0, flags);
flutter::EncodableValue response(true);
result->Success(&response);
}
}
我已经在我的应用程序中测试过了。
隐藏标题栏前:
隐藏标题栏后:
我在我的 flutter 桌面应用程序中使用 window_utils flutter 插件。当我 运行 我的应用程序出现此错误 Image1.
这是我的 pubspec.yaml 代码 Image2。
https://pub.dev/documentation/window_utils/latest/
我试过这个插件的所有版本,但没有用。谁能帮我看看这是什么问题以及如何解决。
问题在于,在插件构建系统和 API 完全稳定之前,该插件是针对 Flutter 桌面支持的非常早期的预发布版本编写的。不幸的是,尽管当时明确警告不要这样做,但它还是发布了,然后,可以预见的是,当下一个重大变化发生时,它很快就停止工作了。由于在那之后它没有更新,它从那以后就再也没有用过。
除了为插件系统的最终版本(包括完全替换其构建系统)分叉和重写它,或者使用不同的插件之外,没有办法解决它。
虽然插件已过期,但 Windows 的 C++ 代码仍然可以工作。
您可以在 pub.dartlang.org\window_utils-1.0.2\windows
找到源代码。
自己用最新的Flutter SDK新建一个插件项目:
flutter create --template=plugin --platforms=windows test
在lib.dart
中定义一个Flutter方法:
static Future<void> hideTitleBar() async {
await _channel.invokeMethod('hideTitleBar');
}
将 C++ 代码添加到 *.cpp 文件:
void FlutterBarcodeSdkPlugin::HandleMethodCall(
const flutter::MethodCall<flutter::EncodableValue> &method_call,
std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (method_call.method_name().compare("hideTitleBar") == 0)
{
HWND hWnd = GetActiveWindow();
SetMenu(hWnd, NULL);
LONG lStyle = GetWindowLong(hWnd, GWL_STYLE);
// lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU);
// lStyle &= WS_DLGFRAME;
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU | WS_DLGFRAME);
SetWindowLong(hWnd, GWL_STYLE, lStyle);
LONG flags = SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER;
SetWindowPos(hWnd, NULL, 0, 0, 0, 0, flags);
flutter::EncodableValue response(true);
result->Success(&response);
}
}
我已经在我的应用程序中测试过了。
隐藏标题栏前:
隐藏标题栏后: