系统相关

锁定固定方向

// 在main.dart中
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
  // 这里只添加允许的方向
  DeviceOrientation.portraitUp,     // 顶部朝上
  DeviceOrientation.portraitDown,   // 顶部朝下
  DeviceOrientation.landscapeLeft,  // 左侧朝上
  DeviceOrientation.landscapeRight  // 右侧朝上
]);

安卓设备UI模式

// 在主函数指向的Widget中:
class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    // 这里设置UI模式为没有空隙,即可以在导航条或者“刘海”后面添加内容
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
    // 其它内容
  }
}

⚠️注意,不要让UI的内容位于安全区之外,详细见长度参数

macOS系统菜单

自定义菜单

return PlatformMenuBar(
  menus: [
    PlatformMenu(
      label: '菜单名称',
      menus: [
        PlatformMenuItemGroup(
          members: [
            PlatformMenuItem(
              label: '菜单按钮',
              onSelected: () {},
            ),
          ]
        )
      ],
    ),
  ],
);

系统菜单

const PlatformMenuItemGroup(
  members: [
    PlatformProvidedMenuItem(
      enabled: true,
      type: PlatformProvidedMenuItemType.hide,
    ),
    PlatformProvidedMenuItem(
      enabled: true,
      type: PlatformProvidedMenuItemType.quit,
    ),
  ]
)

编辑菜单

PlatformMenu(
  label: "编辑".tr,
  menus: [
    PlatformMenuItem(
      label: "拷贝",
      shortcut: const SingleActivator(
        LogicalKeyboardKey.keyC,
        meta: true,
      ),
      onSelected: (){
        final focusedContext = FocusManager.instance.primaryFocus?.context;
        if (focusedContext != null) {
          Actions.invoke(focusedContext, CopySelectionTextIntent.copy);
        }
      }
    ),
    PlatformMenuItem(
      label: "粘贴",
      shortcut: const SingleActivator(
        LogicalKeyboardKey.keyV,
        meta: true
      ),
      onSelected: (){
        final focusedContext = FocusManager.instance.primaryFocus?.context;
        if (focusedContext != null) {
          Actions.invoke(focusedContext, const PasteTextIntent(SelectionChangedCause.keyboard));
        }
      },
    ),
    PlatformMenuItem(
      label: "全选",
      shortcut: const SingleActivator(
        LogicalKeyboardKey.keyA,
        meta: true
      ),
      onSelected: (){
        final focusedContext = FocusManager.instance.primaryFocus?.context;
        if (focusedContext != null) {
          Actions.invoke(focusedContext, const SelectAllTextIntent(SelectionChangedCause.keyboard));
        }
      }
    )
  ]
),