Flutter web:获取全屏大小 - 不是窗口大小

Posted

技术标签:

【中文标题】Flutter web:获取全屏大小 - 不是窗口大小【英文标题】:Flutter web: get full screen size - not window size 【发布时间】:2021-12-28 10:56:06 【问题描述】:

我的 Flutter 桌面 Web 应用程序具有复杂的用户界面,难以做出响应。所以我想把它放在FittedBox 中,如果用户缩小浏览器窗口,它只会缩小整个应用程序。

class CustomPage extends StatelessWidget 
  final Widget child;

  const CustomPage(
    Key? key,
    required this.child,
  ) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: GetPlatform.isDesktop
          ? FittedBox(
              child: SizedBox(
                width: Get.width,
                height: Get.height,
                child: Center(child: child),
              ),
            )
          : Text('Sorry! This was only meant for desktop.'),
    );
  

但是Get.widthWidgetsBinding.instance.window.physicalSize.width 只能获取初始窗口大小。因此,如果应用程序在全屏浏览器中启动,则效果很好,但如果应用程序在小型浏览器中启动,则无法正常工作。 MediaQuery.of(context).size.width 只获取当前屏幕尺寸。

有没有获得桌面物理屏幕尺寸的方法?

【问题讨论】:

如果要监听维度的变化,基本上需要重新构建UI。您可以使用布局生成器,然后将其约束用作宽度和高度。每次尺寸发生变化时,布局构建器都会重建其子级。只需将您的 UI 包装在 Layout Builder 中并使用布局构建器的约束。 【参考方案1】:

你需要导入 import 'dart:html';

然后window.screen?.widthwindow.screen?.height 会给你物理屏幕尺寸

import 'dart:html';

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) => MaterialApp(debugShowCheckedModeBanner: false, home: Home());


class Home extends StatelessWidget 
  const Home(Key? key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(),
      body: LayoutBuilder(builder: (context, c) 
        return Center(
          child: Text('$window.screen?.width   $window.screen?.height'),
        );
      ),
    );
  

【讨论】:

以上是关于Flutter web:获取全屏大小 - 不是窗口大小的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Web:获取设备信息UA窗口大小等

不全屏时如何获取全屏(最小ui)视图的窗口大小?

Flutter Web:创建具有移动应用大小的 UI

Flutter:如何在 webview 中阻止全屏视频?

Flutter web 获取屏幕大小

C++ 获取全屏窗口的设备上下文