【问题标题】:How to return from a widget to StreamBuilder after navigating to another page in flutter app?导航到 Flutter 应用程序中的另一个页面后如何从小部件返回到 StreamBuilder?
【发布时间】:2020-05-21 10:57:35
【问题描述】:

所以第一张图片有来自第一页的代码,我在我的颤振应用程序中有一个 StreamBuilder,在那里我尝试导航到名为 PickupScreen 的有状态小部件,其中包含第二张图片中的代码,它给了我一个错误,上面写着 SetState( 或markNeedsbuild() 在构建期间调用。所以我直接调用了小部件并且它工作但问题是我不能转到上一页我知道我不能使用 pop 但我需要一个解决方案来返回上一页并显示 else 代码。目前我正在导航到另一个名为 HomePage.

的页面

【问题讨论】:

    标签: flutter stream-builder


    【解决方案1】:

    你不能那样做。您可以根据widget.channel.stream 管理屏幕状态,或者您必须以不同的方式设计您的用户界面,以便您可以在屏幕 1 上实际push 一个新屏幕,然后您将能够pop

    如果您仍想保持这种状态,可以在第一个屏幕中执行以下操作:

    return StreamBuilder(
      stream: widget.channel.stream,
      builder: (context, snapshot){
       if(snapshot.hasData && jsonDecode(snapshot.data['ntype'] == 10){
          WidgetsBinding.instance.addPostFrameCallback((_) => Navigator.push(context, MaterialPageRoute(builder: (_) => PickupScreen(data: jsonDecode(snapshot.data))));
        return const SizedBox();
     } else {
        return  _isLoading ? LoadingScreen() : Scaffold();
      }
    });
    

    另外,下次请确保复制/粘贴代码而不是屏幕截图,以便通过修改轻松进行编辑。 :)

    【讨论】:

    • 首先对截图感到抱歉。其次,哇,它帮助我返回,但我写了重复的代码,就像你使用的 SizedBox 一样,我不得不再次用下面使用的脚手架代码替换它。你有解决方案吗?
    • 当然。收听您的信息流(例如,在您的小部件上 initState 并在您想要推送不同的屏幕时根据该信息采取行动)或在使用 StreamBuilder 时根本不使用导航器。
    猜你喜欢
    • 2020-07-29
    • 2020-08-13
    • 2019-09-30
    • 2020-09-03
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多