如何在flutter中设置macOS应用的默认大小?

时间:2020-04-27 03:15:00

标签: flutter flutter-layout

我正在尝试使用flutter构建macOS桌面应用程序。我希望该应用程序为全宽度,边缘到边缘。但是,当我通过模拟器或在构建后运行该应用程序时,它始终会启动大小为800x600的应用程序。

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

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

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),
        ),
      ),
    );
  }
}

5 个答案:

答案 0 :(得分:7)

现在有一个插件可以执行此操作,这并不是永久性的事情,因为它在被最终折叠到核心库中之前被描述为初步功能。

现在使用该插件仍然比直接修改本机代码的硬编码更好,尤其是当您要使用多个平台时。

首先将类似以下内容的内容添加到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());
}

我希望这对某人有帮助。真正的答案出来后,我将尝试更新此帖子。界面似乎可以近似该库中提供的内容,但是功能集可能会发生一些变化。

答案 1 :(得分:3)

当前控制初始大小的唯一方法是在本机代码中(遵循以下问题:12来查找何时更改)。您最有可能要在macos/Runner/MainFlutterWindow.swift中进行设置。

从描述中不清楚是要启动到全屏模式,还是仅具有一个标准的窗口,其大小为屏幕工作区的大小;所涉及的代码会有所不同,具体取决于您要完成的工作。

答案 2 :(得分:1)

您现在应该可以使用window_size plugin在Dart代码中实现此目标。

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

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

类似于您的顶层有状态小部件。 尽管我现在应该注意的是,在Linux上,窗口框大小的设置是可行的,但是定位却不能。

答案 3 :(得分:0)

我不确定这100%是否有效,但是我正在寻找设置窗口大小的可能性。我已经找到了@karora提到的软件包,但是我只想设置窗口大小并继续前进。因此,我们可以使用xcode做到这一点。

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

macos -> Runner.xcodeproj

enter image description here

然后在Xcode项目中找到MainMenu.xib,然后可以调整浮动窗口的大小。 enter image description here

答案 4 :(得分:0)

这个 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);