Flutter如何实现Windows全屏

在Flutter开发Windows应用时,如何实现全屏显示?目前使用window_manager插件设置全屏后,顶部仍会显示系统标题栏。尝试过setFullScreen(true)但效果不理想,请问正确的实现方式是什么?是否需要配合其他参数或使用原生平台代码?

2 回复

在Flutter中,使用window_manager插件实现Windows全屏。通过setFullScreen(true)方法即可启用全屏模式,退出则调用setFullScreen(false)

更多关于Flutter如何实现Windows全屏的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现Windows全屏可以通过以下两种方式实现:

方法1:使用system_window包(推荐)

首先在pubspec.yaml中添加依赖:

dependencies:
  system_window: ^1.0.2

然后在代码中实现:

import 'package:flutter/material.dart';
import 'package:system_window/system_window.dart';

class FullScreenPage extends StatefulWidget {
  @override
  _FullScreenPageState createState() => _FullScreenPageState();
}

class _FullScreenPageState extends State<FullScreenPage> {
  bool isFullScreen = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('全屏示例'),
        actions: [
          IconButton(
            icon: Icon(isFullScreen ? Icons.fullscreen_exit : Icons.fullscreen),
            onPressed: toggleFullScreen,
          ),
        ],
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: toggleFullScreen,
          child: Text(isFullScreen ? '退出全屏' : '进入全屏'),
        ),
      ),
    );
  }

  void toggleFullScreen() async {
    if (!isFullScreen) {
      // 进入全屏
      await SystemWindow.enterFullScreen();
    } else {
      // 退出全屏
      await SystemWindow.exitFullScreen();
    }
    setState(() {
      isFullScreen = !isFullScreen;
    });
  }
}

方法2:使用window_manager

添加依赖:

dependencies:
  window_manager: ^0.3.3

代码实现:

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

class FullScreenExample extends StatefulWidget {
  @override
  _FullScreenExampleState createState() => _FullScreenExampleState();
}

class _FullScreenExampleState extends State<FullScreenExample> with WindowListener {
  bool isFullScreen = false;

  @override
  void initState() {
    windowManager.addListener(this);
    super.initState();
  }

  @override
  void dispose() {
    windowManager.removeListener(this);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('全屏控制'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: toggleFullScreen,
          child: Text(isFullScreen ? '退出全屏' : '进入全屏'),
        ),
      ),
    );
  }

  void toggleFullScreen() async {
    if (!isFullScreen) {
      await windowManager.setFullScreen(true);
    } else {
      await windowManager.setFullScreen(false);
    }
    setState(() {
      isFullScreen = !isFullScreen;
    });
  }

  @override
  void onWindowEnterFullScreen() {
    setState(() {
      isFullScreen = true;
    });
  }

  @override
  void onWindowLeaveFullScreen() {
    setState(() {
      isFullScreen = false;
    });
  }
}

注意事项:

  1. 需要在windows/runner/main.cpp中确保窗口初始化正确
  2. 全屏切换时可能需要处理状态同步
  3. 建议使用system_window包,它专门为全屏功能设计,API更简洁

两种方法都能有效实现Windows平台的全屏功能,选择适合你项目需求的方式即可。

回到顶部