如何解决屏幕方向/在Flutter应用程序中仅在一个屏幕上自动旋转
我只想在应用程序中的一个屏幕上应用屏幕方向。我尝试使用if条件和方向构建器来应用它,但是不知何故,它不起作用。 例如,如果用户按下自动旋转按钮,则屏幕应根据旋转行为,但我只希望在一个屏幕上显示。
// main.dart
void main(
{
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations
([DeviceOrientation.portraitUp]);
runApp(IframeScreen());
}
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter/services.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
import 'package:provider/provider.dart';
class IframeScreen extends StatefulWidget {
@override
_IframeScreenState createState() => _IframeScreenState();
}
class _IframeScreenState extends State<IframeScreen> {
InAppWebViewController _webViewController;
IframeScreen iframe = new IframeScreen();
_IframeScreenState(
@override
void initState() {
onLoadingTesting().then((value) {
print('check modalprogress');
});
super.initState();
}
@override
void dispose(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,DeviceOrientation.portraitUp
]);
super.dispose();
}
InAppWebView webViewMethod() {
WidgetsFlutterBinding.ensureInitialized();
Permission.camera.request();
Permission.microphone.request();
}
}
@override
Widget build(BuildContext context) {
return ModalProgressHUD(
inAsyncCall: _saving,child: WillPopScope(
onWillPop: (){
if(MediaQuery.of(context).orientation==Orientation.landscape){
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
}
return Future.value(true);
},child: Scaffold(
body: OrientationBuilder(
builder: (BuildContext context,orientation) {
return Column(
children: <Widget>[
Expanded(
child: Container(
child: InAppWebView(
initialUrl:
"https://appr.tc/r/158489234",initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
mediaPlaybackRequiresUserGesture: false,debuggingEnabled: true,),onWebViewCreated: (
InAppWebViewController controller) {
_webViewController = controller;
},androidOnPermissionRequest:
(InAppWebViewController controller,String origin,List<String> resources) async {
return PermissionRequestResponse(
resources: resources,action: PermissionRequestResponseAction.GRANT);
}),)
],);
}
)
),);
}
解决方法
为此,您应在main()方法中将首选方向设置为
WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitDown,DeviceOrientation.portraitUp]);
这将确保您的应用程序处于纵向状态(如本示例代码中所设置),直到您对其进行更改为止。
这里的建议是,在需要风景的屏幕中,而不是在Dispose函数中更改方向,而是用“ WillPopScope”包装支架,并按如下方式实现OnWillPop()方法
onWillPop: () {
if (MediaQuery.of(context).orientation == Orientation.landscape) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,DeviceOrientation.portraitDown]);
}
return Future.value(true);
},
这将使从横向屏幕到纵向屏幕的过渡更加平滑。
干杯!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。