如何在Flutter中设置macos应用程序的默认大小?

bjp0bcyl  于 2023-06-30  发布在  Flutter
关注(0)|答案(7)|浏览(451)

我正在尝试使用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),
        ),
      ),
    );
  }
}
bybem2ql

bybem2ql1#

现在有一个插件来做这件事,这不是一个永久的事情,因为它被描述为初步的功能,然后最终被折叠到核心库。
现在使用插件仍然可能比直接修改本机代码的硬编码更好,特别是如果您想要在多个平台上工作。
首先在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());
}

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

qvtsj1bj

qvtsj1bj2#

我不确定这是否100%有效,但我正在寻找设置窗口大小的可能性。我已经找到了@karora提到的包,但我只想设置窗口大小并继续前进。所以我们可以用xcode来实现。
在项目文件夹中打开Runner.xcodeproj:

macos -> Runner.xcodeproj

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

ctehm74n

ctehm74n3#

目前,控制初始大小的唯一方法是在本机代码中(遵循以下问题:12,以确定何时发生变化)。您很可能希望在macos/Runner/MainFlutterWindow.swift中设置它。
从你的描述中还不清楚你是想启动到全屏模式,还是只是有一个与屏幕客户区大小相同的标准窗口;所涉及的代码将根据您试图完成的内容而有所不同。

yvgpqqbh

yvgpqqbh4#

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

yrdbyhpb5#

现在,您应该能够通过使用window_size plugin在Dart代码中实现这一点。
设置初始窗口大小的代码可能类似于:

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

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

ct3nt3jp

ct3nt3jp6#

我需要为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());
}
nimxete2

nimxete27#

要设置macOS的默认窗口大小,您既不需要插件,也不需要使用XCode。
在IDE中打开macos/Runner/Base.lproj/MainMenu.xib。文件末尾有一个<window>标记。在<rect>子标记中查找一个或两个大小定义,并将它们更改为您喜欢的初始大小。

<window title="APP_NAME" ...>
    <windowStyleMask .../>
    <rect key="contentRect" x="335" y="390" width="800" height="600"/>
    <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
    <view key="contentView" wantsLayer="YES">
        <rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
        <autoresizingMask key="autoresizingMask"/>
    </view>
</window>

相关问题