【问题标题】:Flutter window_utils not compiling code and giving CMakeLists.txt file errorFlutter window_utils 未编译代码并给出 CMakeLists.txt 文件错误
【发布时间】:2021-07-25 14:47:34
【问题描述】:

我在我的颤振桌面应用程序中使用 window_utils 颤振插件。当我运行我的应用程序时,我收到了这个错误Image1

这是我的 pubspec.yaml 代码Image2

https://pub.dev/documentation/window_utils/latest/

我尝试了该插件的所有版本,但无法正常工作。任何人都可以帮助我这是什么问题以及如何解决。

【问题讨论】:

    标签: flutter plugins flutter-desktop


    【解决方案1】:

    问题在于,在插件构建系统和 API 完全稳定之前,该插件是针对 Flutter 桌面支持的一个非常早期的预发布版本编写的。不幸的是,尽管当时明确警告不要这样做,但它还是发布了,然后,可以预见的是,在下一次重大变化发生后不久,它就停止了工作。由于在那之后它没有更新,因此从那以后它就再也没有工作过。

    除了分叉它并为插件系统的最终版本重写它(包括完全替换其构建系统)或使用不同的插件之外,没有其他方法可以解决它。

    【讨论】:

    • 还有其他办法吗?正在使用这个插件隐藏窗口的标题栏。
    • 我不确定你在问什么。
    • 我正在开发flutter桌面应用程序并使用这个插件(上面提到过)来隐藏窗口的标题栏。我怎样才能做到这一点?
    • 我的最后一段已经回答了这个问题。
    • 好的。非常感谢。
    【解决方案2】:

    虽然插件已经过时,但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);
        }
    }
    

    我已经在我的应用中对其进行了测试。

    隐藏标题栏之前:

    隐藏标题栏后:

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多