Flutter 如何使纵向在颤振中仅旋转一个选定页面(dispose不起作用)

Flutter 如何使纵向在颤振中仅旋转一个选定页面(dispose不起作用),flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我刚开始从Flatter编写应用程序。我尝试使用服务包仅旋转一个选定页面。我试图将此页面锁定为唯一的纵向屏幕。然后,当我使用dispose离开这个页面时,我尝试使其他页面正常。但它不起作用。当我离开这一页时,另一页无法旋转成横向。我如何解决这个问题 class DiaryDetail extends StatefulWidget { DiaryDetail({Key key}) : super(key: key); @override _DiaryDetailState crea

我刚开始从Flatter编写应用程序。我尝试使用服务包仅旋转一个选定页面。我试图将此页面锁定为唯一的纵向屏幕。然后,当我使用dispose离开这个页面时,我尝试使其他页面正常。但它不起作用。当我离开这一页时,另一页无法旋转成横向。我如何解决这个问题

 class DiaryDetail extends StatefulWidget {
  DiaryDetail({Key key}) : super(key: key);

  @override
  _DiaryDetailState createState() => _DiaryDetailState();
}

class _DiaryDetailState extends State<DiaryDetail> {
  double xOffset = 0; //set X axis and Y axis
  double yOffset = 0;
  double scaleFactor = 1;
  bool isDrawerOpen = false;
  @override
    void initState(){
      super.initState();
      SystemChrome.setPreferredOrientations([
       DeviceOrientation.portraitDown,
       DeviceOrientation.portraitUp,
    ]);
  }
  @override
  Widget build(BuildContext context) {
    var screenSize = MediaQuery.of(context).size;
    var width = screenSize.width;
    var height = screenSize.height;
    return 
    AnimatedContainer(
      decoration: BoxDecoration(
        color: Color(0xff1a3c5a),
        borderRadius: BorderRadius.circular(isDrawerOpen ? 40 : 0.0),
      ),
      transform: Matrix4.translationValues(xOffset, yOffset, 0)
        ..scale(scaleFactor),
      duration: Duration(milliseconds: 250),
      child: SafeArea(
        child:Column(
          children: <Widget>[
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Row(
                  children: <Widget>[
                    isDrawerOpen
                        ? IconButton(
                            icon: Icon(
                              Icons.arrow_back_ios,
                              color: Color(0xffdac6a3),
                            ),
                            onPressed: () {
                              setState(
                                () {
                                  xOffset = 0;
                                  yOffset = 0;
                                  scaleFactor = 1;
                                  isDrawerOpen = false;
                                },
                              );
                            },
                          )
                        : IconButton(
                            icon: Icon(
                              Icons.menu,
                              color: Color(0xffdac6a3),
                            ),
                            onPressed: () {
                              setState(
                                () {
                                  xOffset = 230;
                                  yOffset = 150;
                                  scaleFactor = 0.6;
                                  isDrawerOpen = true;
                                },
                              );
                            },
                          ),
                    SizedBox(
                      width: 10,
                    ),
                    Text(
                      'My Diary',
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 25.0,
                        letterSpacing: 1.0,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ],
                ),
              ],
            ),
            SizedBox(
              height: 5,
            ),
            
            Expanded(
              child: Padding(
                padding: const EdgeInsets.only(left: 3, right: 3,),
                child: Container(
                  decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: isDrawerOpen
                        ? BorderRadius.circular(40)
                        : BorderRadius.only(
                            topLeft: Radius.circular(60),
                            topRight: Radius.circular(60),
                          ),
                  ),
                  child: Container(
                    child: DiaryCalenda(),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
  @override
dispose(){
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.landscapeRight,
    DeviceOrientation.landscapeLeft,
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  super.dispose();
}
}
class DiaryDetail扩展了StatefulWidget{
日记详细信息({Key}):超级(Key:Key);
@凌驾
_DiaryDetailState createState()=>\u DiaryDetailState();
}
类_DiaryDetailState扩展状态{
double xOffset=0;//设置X轴和Y轴
双yOffset=0;
双尺度因子=1;
bool isDrawerOpen=false;
@凌驾
void initState(){
super.initState();
SystemChrome.setPreferredOrientations([
DeviceOrientation.down,
DeviceOrientation.Up,
]);
}
@凌驾
小部件构建(构建上下文){
var screenSize=MediaQuery.of(context).size;
var width=屏幕大小.width;
var height=屏幕大小.height;
返回
动画容器(
装饰:盒子装饰(
颜色:颜色(0xff1a3c5a),
边界半径:边界半径。圆形(isDrawerOpen?40:0.0),
),
转换:Matrix4.translationValues(xOffset,yOffset,0)
…比例(比例因子),
持续时间:持续时间(毫秒:250),
儿童:安全区(
子:列(
儿童:[
划船(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
划船(
儿童:[
isDrawerOpen
?图标按钮(
图标:图标(
Icons.arrow\u back\u ios,
颜色:颜色(0xffdac6a3),
),
已按下:(){
设定状态(
() {
xOffset=0;
yOffset=0;
scaleFactor=1;
isDrawerOpen=false;
},
);
},
)
:图标按钮(
图标:图标(
图标菜单,
颜色:颜色(0xffdac6a3),
),
已按下:(){
设定状态(
() {
xOffset=230;
yOffset=150;
scaleFactor=0.6;
isDrawerOpen=true;
},
);
},
),
大小盒子(
宽度:10,
),
正文(
“我的日记”,
样式:TextStyle(
颜色:颜色,白色,
字体大小:25.0,
字母间距:1.0,
fontWeight:fontWeight.bold,
),
),
],
),
],
),
大小盒子(
身高:5,,
),
扩大(
孩子:填充(
填充:常量边集。仅限(左:3,右:3,),
子:容器(
装饰:盒子装饰(
颜色:颜色,白色,
边界半径:isDrawerOpen
?边界半径。圆形(40)
:仅限边界半径(
左上:半径。圆形(60),
右上角:半径。圆形(60),
),
),
子:容器(
孩子:DiaryCalenda(),
),
),
),
),
],
),
),
);
}
@凌驾
处置{
SystemChrome.setPreferredOrientations([
设备定向,景观权,
DeviceOrientation.landscapeLeft,
DeviceOrientation.Up,
DeviceOrientation.down,
]);
super.dispose();
}
}

您可以在上一页中实现RouteAware()并使用didPopNext(),这样当您返回此屏幕时,可以再次设置方向

class _YourClassState extends State<YourClass> with RouteAware {

 @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void dispose() {
    routeObserver.unsubscribe(this);
    super.dispose();
  }

  @override
  void didPopNext() {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.landscapeRight,
    ]);
  }

  //the rest of your class

}
class\u您的ClassState使用RouteAware扩展状态{
@凌驾
void didChangeDependencies(){
super.didChangeDependencies();
subscribe(这是(上下文)的ModalRoute.of);
}
@凌驾
无效处置(){
routeObserver.unsubscribe(此);
super.dispose();
}
@凌驾
void didPopNext(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.Up,
DeviceOrientation.landscapeLeft,
设备定向,景观权,
]);
}
//你们班的其他同学
}