【发布时间】:2021-07-25 14:47:34
【问题描述】:
我在我的颤振桌面应用程序中使用 window_utils 颤振插件。当我运行我的应用程序时,我收到了这个错误Image1。
https://pub.dev/documentation/window_utils/latest/
我尝试了该插件的所有版本,但无法正常工作。任何人都可以帮助我这是什么问题以及如何解决。
【问题讨论】:
标签: flutter plugins flutter-desktop
我在我的颤振桌面应用程序中使用 window_utils 颤振插件。当我运行我的应用程序时,我收到了这个错误Image1。
https://pub.dev/documentation/window_utils/latest/
我尝试了该插件的所有版本,但无法正常工作。任何人都可以帮助我这是什么问题以及如何解决。
【问题讨论】:
标签: flutter plugins flutter-desktop
问题在于,在插件构建系统和 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);
}
}
我已经在我的应用中对其进行了测试。
隐藏标题栏之前:
隐藏标题栏后:
【讨论】: