Flutter Push与国家相关的观点

时间:2018-08-12 18:53:58

标签: 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())),)
  ),
);
}
}

使用国

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;
    });
  })),
);
}
}

2 个答案:

答案 0 :(得分:3)

当然答案是:这取决于。

何时使用Navigator

使用导航器推送的路线与...的等效方式

    在Android中
  • ActivityFragment
  • Angular或React中的路线
  • 经典网页的html文件

您将使用Navigator在应用程序的逻辑上分开的各个部分之间进行切换。想一想随不同页面一起提供的StackOverflow应用,例如“问题列表”,“问题详细信息”,“询问问题”表格和“用户个人资料”。

Navigator负责后退导航(Android手机上的硬件后退按钮+ AppBar中的后退箭头)

请注意,路线不必覆盖全屏。 showDialog在内部也使用Navigator.push()(这就是为什么您使用Navigator.pop()来关闭对话框的原因。

类似于Android上的startActivityForResult,当调用pop时,路由也可以返回结果。想想一个对话框,您可以选择一个日期。

何时使用State

当屏幕是逻辑单位时,请使用State,例如:

  • 从服务器加载项目列表时,将有4种不同的状态:
    • 加载
    • “发生错误...”
    • 列表为空时显示的占位符
    • ListView
  • 具有多个步骤的表单
  • 具有多个标签的屏幕(在这种情况下,导航由标签栏处理)
  • POST请求发送到服务器时,“请稍候”叠加层会阻塞屏幕

毕竟,Navigator也是StatefulWidget,用于跟踪路线历史。有状态的小部件是Flutter的基本构建块。当您的应用确实很复杂且Navigator无法满足您的需求时,您始终可以创建自己的StatefulWidget来进行完全控制。

始终有助于查看Flutter的源代码(Android Studio中为CTRL + B)。

答案 1 :(得分:0)

go get

很抱歉格式化错误。您可以在没有任何依赖性的情况下运行此代码。希望对您有帮助