- Flutter - Managing Device Orientation
- 定位需要什么?
- 如何设置设备方向?
- 示例代码
- 如何管理设备方向?
- 示例 1:将设备方向设置为横向模式
- Dart实现
- 示例 2:在纵向模式下设置设备方向
- Dart实现
Flutter - Managing Device Orientation
开发人员在 Flutter 中创建的所有应用程序都可以在具有各种屏幕像素和尺寸的多种设备上运行。在 Flutter 中管理屏幕方向对于建立在多个设备上运行的成功应用程序起着重要作用。在 Flutter 中,您可以选择最佳方式以简单方便的方式应对此类设备方向挑战。在本文中,我们将带您了解 Flutter 中的屏幕方向。
定位需要什么?
要学习定向管理,首先,您需要了解这样做的必要性。屏幕方向管理在很大程度上改善了用户体验。当您更改屏幕方向时,当前在应用程序上运行的操作会根据新方向更改并重新构建自身。例如,在玩赛车游戏时将方向更改为横向模式。
如何设置设备方向?
Flutter 提供了 2 种方式来定位设备,即:
- 肖像
- 风景
以下是根据您的适用性更改移动应用程序方向的说明步骤。
第 1 步:在主文件中包含服务包。
第二步:在主函数调用后调用“WidgetsFlutterBinding.ensureInitialized()”方法。
第 3 步:在“WidgetsFlutterBinding.ensureInitialized()”方法之后调用“SystemChrome.setPreferredOrientations”。
现在要设置纵向模式,flutter 提供了两个方向选项,即:
- DeviceOrientation.portraitUp,
- DeviceOrientation.portraitDown,
示例代码
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);runApp(HomeApp());
}
为了设置横向模式,flutter 提供了两个方向选项:
- DeviceOrientation.landscapeLeft
- DeviceOrientation.landscapeRight
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight
]);runApp(HomeApp());
}
如何管理设备方向?
第一步:
打开您要在其上管理方向的屏幕。
第二步:
添加一个init()方法,在你想要应用的模式下调用SystemChrome.setPreferredOrientations。
第 3 步:
添加一个dispose()方法,在你想要移除的模式下调用SystemChrome.setPreferredOrientations。
让我们借助示例仔细查看步骤
示例 1:将设备方向设置为横向模式
Dart实现
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(HomeApp());
}
class HomeApp extends StatefulWidget {
HomeApp({Key? key}) : super(key: key);
@override
State<HomeApp> createState() => _HomeAppState();
}
class _HomeAppState extends State<HomeApp> {
void initState() {
super.initState();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
@override
dispose() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
super.dispose();
}
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
title: const Text('GeeksforGeeks'),
),
body: const FirstScreen()));
}
}
class FirstScreen extends StatelessWidget {
const FirstScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: ElevatedButton(
child: Text('Click here'),
style: OutlinedButton.styleFrom(
backgroundColor: Colors.green,
primary: Colors.black,
textStyle: TextStyle(fontSize: 15, fontStyle: FontStyle.normal),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10)))),
onPressed: () => Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => const NewScreen())),
),
),
);
}
}
class NewScreen extends StatefulWidget {
const NewScreen({Key? key}) : super(key: key);
@override
State<NewScreen> createState() => _NewScreenState();
}
class _NewScreenState extends State<NewScreen> {
TextEditingController textEditingController = TextEditingController();
@override
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
title: const Text('New Screen'),
),
body: Center(child: Text('You shifted to Landscape mode')),
);
}
}
输出:
https://media.geeksforgeeks.org/wp-content/uploads/20220525000006/landscape。 mp4
示例 2:在纵向模式下设置设备方向
Dart实现
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(HomeApp());
}
class HomeApp extends StatefulWidget {
HomeApp({Key? key}) : super(key: key);
@override
State<HomeApp> createState() => _HomeAppState();
}
class _HomeAppState extends State<HomeApp> {
void initState() {
super.initState();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
}
@override
dispose() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
]);
super.dispose();
}
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
title: const Text('GeeksforGeeks'),
),
body: const FirstScreen()));
}
}
class FirstScreen extends StatelessWidget {
const FirstScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: ElevatedButton(
child: Text('Click here'),
style: OutlinedButton.styleFrom(
backgroundColor: Colors.green,
primary: Colors.black,
textStyle: TextStyle(fontSize: 15, fontStyle: FontStyle.normal),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10)))),
onPressed: () => Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => const NewScreen())),
),
),
);
}
}
class NewScreen extends StatefulWidget {
const NewScreen({Key? key}) : super(key: key);
@override
State<NewScreen> createState() => _NewScreenState();
}
class _NewScreenState extends State<NewScreen> {
TextEditingController textEditingController = TextEditingController();
@override
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
title: const Text('New Screen'),
),
body: Center(child: Text('You shifted to landscape mode')),
);
}
}
输出:
https://media.geeksforgeeks.org/wp-content/uploads/20220525000129/portrait。 mp4
注:本文由VeryToolz翻译自 Flutter - Managing Device Orientation ,非经特殊声明,文中代码和图片版权归原作者 rharshitaaa21所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。