我是Flutter的新手。
我有一个带有2个子窗口小部件的应用程序(Android中为2个片段),当我单击WidgetA中的next按钮时,我想将该窗口小部件替换(或推入)WidgetChildA中,就像Android中的push(或替换)片断一样。但是相反,我得到了一个全屏小部件,就像Flutter中的普通屏幕一样。
这是我的代码:
import 'package:flutter/material.dart'; class DemoFragment extends StatefulWidget { @override State<StatefulWidget> createState() { return new DemoFragmentState(); } } class DemoFragmentState extends State<DemoFragment> { @override Widget build(BuildContext context) { print(context.toString() + context.hashCode.toString()); return new Scaffold( appBar: new AppBar(title: new Text("Demo fragment")), body: new Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisSize: MainAxisSize.max, children: <Widget>[ new FragmentA(), new FragmentB() ], ), ); } } class FragmentA extends StatelessWidget { @override Widget build(BuildContext context) { print(context.toString() + context.hashCode.toString()); return new Center( child: new Column( children: <Widget>[ new Text("Fragment A"), new RaisedButton( child: new Text("next"), onPressed: () { print(context.toString() + context.hashCode.toString()); Navigator.of(context).push(new PageRouteBuilder( opaque: true, transitionDuration: const Duration(milliseconds: 0), pageBuilder: (BuildContext context, _, __) { return new FragmentChildA(); })); /*showDialog( context: context, builder: (_) => new AlertDialog( title: new Text("Hello world"), content: new Text("this is my content"), ));*/ }) ], ), ); } } class FragmentB extends StatelessWidget { @override Widget build(BuildContext context) { print(context.toString() + context.hashCode.toString()); return new Center( child: new Column( children: <Widget>[ new Text("Fragment B"), new RaisedButton( child: new Text("next"), onPressed: () { print(context.toString() + context.hashCode.toString()); Navigator.of(context).push(new PageRouteBuilder( opaque: true, transitionDuration: const Duration(milliseconds: 0), pageBuilder: (BuildContext context, _, __) { return new FragmentChildB(); })); }) ], )); } } class FragmentChildA extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: new Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[new Text("Fragment Child A")], ))); } } class FragmentChildB extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: new Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[new Text("Fragment Child B")], ))); } }
屏幕截图:
主页
点击后
好吧,我花了几个月的时间找到了处理此案的方法,但是我只是忘了回答这个问题。
解决方案是用新的导航器包装您的Widget。
您可以在这里看到视频示例
而这里的简单演示
该解决方案的缺点有时是键盘没有显示为我的意图。