有两种方法可以更改用户在显示器上看到的内容:我可以推送到另一个页面,也可以更改有状态窗口小部件的状态并重建它。您能告诉我哪种方法是最佳做法? (如果这取决于-我猜-取决于什么?)
推动:
class Pushing extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () => Navigator.push(context, new MaterialPageRoute(builder: (context) => new SecondPage())),)
),
);
}
}
使用国
class UsingStates extends StatefulWidget {
@override
State createState() => new _UsingStatesState();
}
class _UsingStatesState extends State<UsingStates> {
bool isPageTwo;
@override
void initState() {
isPageTwo = false;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: isPageTwo ? Center(child: Text('Page two')) : Center(child: RaisedButton(onPressed: () {
setState(() {
isPageTwo = true;
});
})),
);
}
}
答案 0 :(得分:3)
当然答案是:这取决于。
Navigator
:使用导航器推送的路线与...的等效方式
Activity
和Fragment
您将使用Navigator
在应用程序的逻辑上分开的各个部分之间进行切换。想一想随不同页面一起提供的StackOverflow应用,例如“问题列表”,“问题详细信息”,“询问问题”表格和“用户个人资料”。
Navigator
负责后退导航(Android手机上的硬件后退按钮+ AppBar
中的后退箭头)
请注意,路线不必覆盖全屏。 showDialog
在内部也使用Navigator.push()
(这就是为什么您使用Navigator.pop()
来关闭对话框的原因。
类似于Android上的startActivityForResult
,当调用pop
时,路由也可以返回结果。想想一个对话框,您可以选择一个日期。
State
:当屏幕是逻辑单位时,请使用State
,例如:
ListView
POST
请求发送到服务器时,“请稍候”叠加层会阻塞屏幕毕竟,Navigator
也是StatefulWidget
,用于跟踪路线历史。有状态的小部件是Flutter的基本构建块。当您的应用确实很复杂且Navigator
无法满足您的需求时,您始终可以创建自己的StatefulWidget
来进行完全控制。
始终有助于查看Flutter的源代码(Android Studio中为CTRL + B)。
答案 1 :(得分:0)
go get
很抱歉格式化错误。您可以在没有任何依赖性的情况下运行此代码。希望对您有帮助