桌面端窗口

桌面端窗口

使用window_manager

在项目中使用下面的命令来安装:

flutter pub add window_manager

配置window_manager

注意:不同系统需要进行不同的配置,可以点击这里查看

main.dart中这样修改主函数:

void main() async {
  await windowManager.ensureInitialized();

  WindowOptions windowOptions = WindowOptions(
    size: Size(800, 600),
    center: true,
    backgroundColor: Colors.transparent,
    skipTaskbar: false,
    titleBarStyle: TitleBarStyle.hidden,
  );
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

// 注意添加with WindowListener
class _MyAppState extends State<MyApp> with WindowListener {
  @override
  void initState() {
    super.initState();
    // 在这里添加监听
    windowManager.addListener(this);
  }

 @override
  void dispose() {
    // 在这里销毁
    windowManager.removeListener(this);
    super.dispose();
  }
}

添加拖动区域

因为使用window_manager之后,会导致整个窗口无法拖动,可以使用下面的内容来设置一个拖动区域

// 注意,外层使用Stack包裹,保证不会影响到其他Widget
Positioned(
  child: Container(
    color: Colors.transparent,
    // 设置可以自定义的高度
    height: 30,
    child: DragToMoveArea(
      child: Container()
    ),
  ),
),

添加Windows窗口按钮

Row(
  children: [
    WindowCaptionButton.minimize(
      onPressed: // 添加最小化窗口操作
    ),
    isMax ? // 注意设置isMax参数
    WindowCaptionButton.maximize(
      onPressed: // 添加最大化窗口操作
    ) :  WindowCaptionButton.unmaximize(
      onPressed: // 添加还原窗口操作
    ),
    WindowCaptionButton.close(
      onPressed: // 添加关闭窗口操作
    ),
  ]
)