在Flutter中设置窗口阻力点

ztmd8pv5  于 2022-11-25  发布在  Flutter
关注(0)|答案(1)|浏览(175)

我的Flutter应用程序使用了相对较新的Windows构建工具和社区fluent_ui包。
为了使我的应用程序看起来更原生,我选择使用window_manager包删除默认的Windows标题栏,并实现我自己的标题栏。但是,这会带来无法通过拖动窗口顶部来移动窗口的问题。
有没有一种方法可以让一个小部件成为一个窗口拖动点来实现这一点?

tktrz96b

tktrz96b1#

我最近通过制作DraggableAppBar找到了一个解决方案。我还使用window_manager包在appbar中添加窗口控制按钮。
解决方案:在scaffold中使用DraggableAppBar而不是AppBar。

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

class DraggebleAppBar extends StatelessWidget implements PreferredSizeWidget {
  final String title;
  final Brightness brightness;
  final Color backgroundColor;

  const DraggebleAppBar({
    super.key,
    required this.title,
    required this.brightness,
    required this.backgroundColor,
  });

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        getAppBarTitle(title),
        Align(
          alignment: AlignmentDirectional.centerEnd,
          child: SizedBox(
            height: kToolbarHeight,
            width: 200,
            child: WindowCaption(
              backgroundColor: backgroundColor,
              brightness: brightness,
            ),
          ),
        )
      ],
    );
  }

  Widget getAppBarTitle(String title) {
    if (UniversalPlatform.isWeb) {
      return Align(
        alignment: AlignmentDirectional.center,
        child: Text(title),
      );
    } else {
      return DragToMoveArea(
        child: SizedBox(
          height: kToolbarHeight,
          child: Align(
            alignment: AlignmentDirectional.center,
            child: Text(title),
          ),
        ),
      );
    }
  }

  @override
  Size get preferredSize => const Size.fromHeight(kToolbarHeight);
}

相关问题