抖动应用程序中每个屏幕的纵向/横向

问题描述 投票:0回答:1

构建一个Flutter应用程序。我希望一页以横向显示,而应用程序的其余部分以纵向显示。我可以使用在这里和其他地方找到的技术来实现这一目标,但是效果不是很好。最初进入横向屏幕时,有一种“颤抖”,而该应用似乎正在弄清楚该怎么做。然后它显示确定。但是回过头来,原始屏幕首先在相当长的时间内(大约一秒钟)以横向显示,然后在纵向显示之前还有另一个“颤抖”。下面简化了main.dart。我在做什么错?


import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class ScreenOne extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('screen one'),
      ),
      body: Column(
        children: <Widget>[
          Center(
            child: Text('some text'),
          ),
          RaisedButton(
            child: Text('Go to screen two'),
            onPressed: () {
              Navigator.pushNamed(
                context,
                'screenTwo',
              );
            },
          )
        ],
      ),
    );
  }
}

class ScreenTwo extends StatefulWidget {
  @override
  _ScreenTwoState createState() => _ScreenTwoState();
}

class _ScreenTwoState extends State<ScreenTwo> {
  @override
  void dispose() {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
    ]);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (MediaQuery.of(context).orientation != null) {
      SystemChrome.setPreferredOrientations([
        DeviceOrientation.landscapeLeft,
      ]);
    }
    return Scaffold(
      appBar: AppBar(
        title: Text('screen two'),
      ),
      body: Center(
        child: Text('other text'),
      ),
    );
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ScreenOne(),
      routes: {
        'screenTwo': (ctx) => ScreenTwo(),
      },
    );
  }
}
flutter orientation landscape landscape-portrait portrait
1个回答
0
投票

像这样修改第二个屏幕

© www.soinside.com 2019 - 2024. All rights reserved.