window_manager icon indicating copy to clipboard operation
window_manager copied to clipboard

setAspectRatio Windows/Linux 平台行为不一致

Open dongfengweixiao opened this issue 5 months ago • 1 comments

import 'package:flutter/material.dart';
import 'package:video_player_media_kit/video_player_media_kit.dart';
import 'package:window_manager/window_manager.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  VideoPlayerMediaKit.ensureInitialized(windows: true, linux: true);
  await windowManager.ensureInitialized();
  WindowOptions windowOptions = WindowOptions(
    size: Size(1280, 720),
    minimumSize: Size(960, 540),
    center: true,
    backgroundColor: Colors.transparent,
    titleBarStyle: TitleBarStyle.hidden,
  );
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.setTitleBarStyle(
      TitleBarStyle.hidden,
      windowButtonVisibility: false,
    );
    await windowManager.setAspectRatio(16 / 9);
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: MyHomePage());
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: AspectRatio(
        aspectRatio: 16 / 9,
        child: LayoutBuilder(
          builder: (context, constraints) {
            return Container(
              color: Colors.blue,
              child: Text(
                'Container Width: ${constraints.maxWidth}\nContainer Height: ${constraints.maxHeight}',
              ),
            );
          },
        ),
      ),
    );
  }
}

以上代码,预期生成一个宽度为 1280 高度为 720 的窗口,窗口内填充宽度为 1280 高度为 720 ,背景颜色为蓝色的容器,容器内显示当前容器的宽高。

但是,在 Linux 平台运行后蓝色容器不能填充满窗口,容器内的文字提示为 Container Width: 1240.888888\nContainer Height: 698.0,蓝色背景无法完全填充窗口,在最右侧存在一定的空白。

相同的代码,在 windows 平台运行符合预期,整个窗口完全填充蓝色背景。

dongfengweixiao avatar Sep 28 '25 14:09 dongfengweixiao

经过测试,并不是每一次蓝色都无法全屏,有时候也能够全屏,但是改变窗口尺寸后,会再次出现白色边框。

https://github.com/user-attachments/assets/f6e581c2-dac1-4849-a67c-89cf7ad4bda0

dongfengweixiao avatar Sep 30 '25 03:09 dongfengweixiao