系统相关
锁定固定方向
// 在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);
// 其它内容
}
}Warning
不要让UI的内容位于安全区之外,详细见长度参数
macOS系统菜单
菜单模板
Warning
系统按钮如果要适配语言,需要在Xcode中设置语言,简体中文语言见页尾
return Platform.isMacOS ? PlatformMenuBar(
menus: [
PlatformMenu(
label: "App 名称",
menus: [
PlatformMenuItemGroup(
members: [
PlatformMenuItem(
label: "关于 App",
onSelected: (){
// 显示关于
}
)
]
),
PlatformMenuItemGroup(
members: [
PlatformMenuItem(
label: "设置",
shortcut: const SingleActivator(
LogicalKeyboardKey.comma,
meta: true,
),
onSelected: (){
// 前往设置
}
),
]
),
const PlatformMenuItemGroup(
members: [
PlatformProvidedMenuItem(
enabled: true,
type: PlatformProvidedMenuItemType.hide,
),
PlatformProvidedMenuItem(
enabled: true,
type: PlatformProvidedMenuItemType.quit,
),
]
),
]
),
PlatformMenu(
label: "编辑",
menus: [
PlatformMenuItem(
label: "拷贝",
onSelected: (){
final focusedContext = FocusManager.instance.primaryFocus?.context;
if (focusedContext != null) {
Actions.invoke(focusedContext, CopySelectionTextIntent.copy);
}
}
),
PlatformMenuItem(
label: "粘贴",
onSelected: (){
final focusedContext = FocusManager.instance.primaryFocus?.context;
if (focusedContext != null) {
Actions.invoke(focusedContext, const PasteTextIntent(SelectionChangedCause.keyboard));
}
},
),
PlatformMenuItem(
label: "全选",
onSelected: (){
final focusedContext = FocusManager.instance.primaryFocus?.context;
if (focusedContext != null) {
Actions.invoke(focusedContext, const SelectAllTextIntent(SelectionChangedCause.keyboard));
}
}
)
]
),
const PlatformMenu(
label: "窗口",
menus: [
PlatformMenuItemGroup(
members: [
PlatformProvidedMenuItem(
enabled: true,
type: PlatformProvidedMenuItemType.minimizeWindow,
),
PlatformProvidedMenuItem(
enabled: true,
type: PlatformProvidedMenuItemType.toggleFullScreen,
)
]
)
]
)
]
) : Container()语言文件,这个文件位于zh-Hans.lproj/MainMenu.strings
代码见GitHub