aks*_*ksn 0 flutter flutter-layout
有两种方法可以更改用户在显示上看到的内容:我可以推送到另一个页面,或者可以更改有状态小部件的状态并重建它。你能告诉我哪种方法是最佳实践吗?(如果这取决于——我猜——取决于什么?)
推动:
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())),)
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
使用状态
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;
});
})),
);
}
}
Run Code Online (Sandbox Code Playgroud)
答案当然是:视情况而定。
Navigator:使用导航器推送的路线在某种程度上相当于......
Activity而Fragment在安卓中您可以使用Navigator在应用程序的逻辑上独立的部分之间进行切换。想象一下带有不同页面的 StackOverflow 应用程序,例如“问题列表”、“问题详细信息”、“提问”表单和“用户个人资料”。
Navigator负责后退导航(Android 手机上的硬件后退按钮 + 中的后退箭头AppBar)
请注意,路线不必覆盖整个屏幕。showDialog也在内部使用Navigator.push()(这就是您用来Navigator.pop()关闭对话框的原因。
与 Android 类似,路由在被调用startActivityForResult时也可以返回结果。pop想象一个让您选择日期的对话框。
State:State当屏幕是逻辑单元时使用,例如:
ListViewPOST当请求发送到服务器时,“请稍候”覆盖会阻塞屏幕毕竟Navigator也是一个StatefulWidget记录路线历史的。有状态的 widget 是 Flutter 的基本构建块。当您的应用程序非常复杂且Navigator无法满足您的需求时,您始终可以创建自己的应用程序StatefulWidget以实现完全控制。
查看 Flutter 的源代码(Android Studio 中的 CTRL + B)总是有帮助的。