【问题标题】:How to set default size of macos app in flutter?如何在颤动中设置macOS应用程序的默认大小?
【发布时间】:2020-08-10 13:15:39
【问题描述】:

我正在尝试用颤振构建一个 macOS 桌面应用程序。我希望应用程序是全角的,边缘到边缘的。但是,当我通过模拟器运行应用程序时,或者在构建之后,它总是启动大小为 800x600 的应用程序。

我已将根容器的高度和宽度设置为 double.infinity。事实上,即使我将高度和宽度设置为 10.0,它总是以 800x600 启动应用程序。我是 Flutter 的新手,所以可能缺少一些基础知识。我遇到的大多数教程都在谈论构建一个移动应用程序,这从来都不是问题,因为应用程序总是以全宽启动。

这是我的整个测试应用代码:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Colors.white),
      height: double.infinity,
      width: double.infinity,
      child: Center(
        child: Text(
          'Hello World',
          textDirection: TextDirection.ltr,
          style: TextStyle(
              fontSize: 32, fontWeight: FontWeight.bold, color: Colors.black),
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    我需要为 Windows 桌面应用程序设置默认大小,这个解决方案对我有用,并且涵盖了 ios 和 linux 平台。

    import 'package:desktop_window/desktop_window.dart'as window_size;
    import 'dart:io';
    
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
        window_size.DesktopWindow.setMinWindowSize(Size(375, 750));
        window_size.DesktopWindow.setMaxWindowSize(Size(600, 1000));
      }
      runApp(MyApp());
    }
    

    【讨论】:

      【解决方案2】:

      这个package 可以帮忙。

          Size size = await DesktopWindow.getWindowSize();
          print(size);
          await DesktopWindow.setWindowSize(Size(500,500));
      
          await DesktopWindow.setMinWindowSize(Size(400,400));
          await DesktopWindow.setMaxWindowSize(Size(800,800));
      
          await DesktopWindow.resetMaxWindowSize();
          await DesktopWindow.toggleFullScreen();
          bool isFullScreen = await DesktopWindow.getFullScreen();
          await DesktopWindow.setFullScreen(true);
          await DesktopWindow.setFullScreen(false);
      

      【讨论】:

        【解决方案3】:

        现在有一个插件可以做到这一点,这不是永久性的,因为它被描述为最终被折叠到核心库之前的初步功能。

        目前使用该插件可能仍然比硬编码直接修改本机代码要好,尤其是在您想要在多个平台上工作的情况下。

        首先添加到pubspec.yaml 类似:

        dependencies:
          ...
          window_size:
            git:
              url: git://github.com/google/flutter-desktop-embedding.git
              path: plugins/window_size
              ref: 927f8cbc09b35d85245c095f2db8df9b186f6618
        

        如上所示,使用特定的 Git 引用将其包含在内,您可以很好地控制何时选择提取更新的代码并进行任何可能需要的更改。

        然后您可以访问各种功能来设置最小/最大窗口大小,或框架,或获取当前值,例如:

        ...
        import 'dart:io'
        import 'package:window_size/window_size.dart';
        ...
        void main() {
          WidgetsFlutterBinding.ensureInitialized();
          if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
            setWindowTitle("My Desktop App");
            setWindowMinSize(Size(375, 750));
            setWindowMaxSize(Size(600, 1000));
          }
          runApp(MyApp());
        }
        

        我希望这对某人有所帮助。当真正的答案出来时,我会尝试更新这篇文章。界面看起来很可能与此库中的内容相近,但功能集可能会发生一些变化。

        【讨论】:

        • 希望找到类似的解决方案,而无需这种硬编码的 window_size 依赖项:) 谢谢你,一个向导。
        • 我决定对显式修订进行硬编码,因为当有人阅读此内容时,当时插件版本的实际代码可能与我在此处记录的内容有所不同。人们绝对应该阅读插件的文档,参考当前版本并使用当前语法。在我自己的代码中,我明确地ref: 修订版,并且在某些时候我会重新阅读文档并更新需要更新的内容,但这将是一个受控的更改:-)
        【解决方案4】:

        您现在应该可以使用 window_size plugin 在 Dart 代码中实现这一点。

        设置初始窗口大小的代码可能类似于:

         @override
          void initState() {
            super.initState();
            setWindowFrame(Rect.fromLTRB(1200.0, 500.0, 1800.0, 1125.0));
          }
        

        类似于您的顶级有状态小部件。 虽然我应该注意到,目前在 Linux 上,窗口框架大小可以工作,但定位却不行。

        【讨论】:

        • 在 Windows 上为我工作
        【解决方案5】:

        我不确定这是否 100% 有效,但我正在寻找设置窗口大小的可能性。我找到了@karora 提到的包,但我只想设置窗口大小并继续前进。所以我们可以使用 xcode 来实现。

        在项目文件夹中打开 Runner.xcodeproj:

        macos -> Runner.xcodeproj
        

        然后在 Xcode 项目中找到 MainMenu.xib 然后你可以调整你的颤振窗口的大小。

        【讨论】:

          【解决方案6】:

          目前,控制初始大小的唯一方法是使用本机代码(关注这些问题:12 以了解何时更改)。您很可能希望将其设置为 macos/Runner/MainFlutterWindow.swift

          从您的描述中不清楚您是要启动到全屏模式,还是只使用屏幕客户区大小的标准窗口;所涉及的代码会有所不同,具体取决于您要完成的任务。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-11-08
            • 2023-03-29
            • 1970-01-01
            • 1970-01-01
            • 2014-12-16
            • 1970-01-01
            • 2012-12-26
            • 2013-07-04
            相关资源
            最近更新 更多