Flutter:从另一个回来时更新屏幕

jack_the_beast

我已经阅读了有关该主题的其他答案,但我有点困惑。

我有这种非常常见的情况,ScreenA触发导航到ScreenBScreenB执行其操作然后用户点击后退按钮,然后我们返回到ScreenA在这一点上,我想运行一些代码,但我不明白该怎么做。

这是我导航到的代码ScreenB

Navigator.pushNamed(context, Router.ScreenB)

导航器:

class Router {
  static const ScreenB = "/b";

  static Route<dynamic> generateRoute(RouteSettings routeSettings) {
    switch (routeSettings.name) {
      case ScreenB :
        return MaterialPageRoute(builder: (_) => ScreenB());
      default:
        return MaterialPageRoute(builder: (_) {
          return Scaffold(
            body: Center(
              child: Text('No route defined for ${routeSettings.name}'),
            ),
          );
        });
    }
  }
}

我试着做

Navigator.pushNamed(context, Router.ScreenB)
.then((value) {
   //do stuff
});

但从then()未被调用,即使我添加

Navigator.pop(context);

ScreenB

我在这里错过了什么?

国际象棋

这是一个工作示例:

import 'package:flutter/material.dart';
import 'package:pop_test/router.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      onGenerateRoute: Router.generateRoute,
      home: ScreenA(),
    );
  }
}

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class Router {
  static const Screen_B = "/b";

  static Route<dynamic> generateRoute(RouteSettings routeSettings) {
    switch (routeSettings.name) {
      case Screen_B:
        return MaterialPageRoute(builder: (_) => ScreenB());
      default:
        return MaterialPageRoute(builder: (_) {
          return Scaffold(
            body: Center(
              child: Text('No route defined for ${routeSettings.name}'),
            ),
          );
        });
    }
  }
}

class ScreenA extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Screen A"),
      ),
      body: Center(
        child: FlatButton(
          onPressed: () {
            Navigator.of(context).pushNamed(Router.Screen_B).then((value) {
              print("do stuff");
            });
          },
          child: Text("Push screen B"),
        ),
      ),
    );
  }
}

class ScreenB extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Screen B"),
      ),
      body: Center(
        child: FlatButton(
          onPressed: () {
            Navigator.of(context).pop();
          },
          child: Text("Pop"),
        ),
      ),
    );
  }
}

我应该提到我已经重命名了Router.ScreenB常量,因为名称与屏幕类冲突(也许这是你的问题?)。除了这一点,我认为没有其他变化。此外,通常最好使用async/await而不是Future.then.

顺便说一下,你已经写过当用户回击时你需要做一些事情。如果您在这里指的是系统按钮,那么您应该使用WillPopScope小部件。我希望这将有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Xamarin跨平台的一个屏幕转到另一个屏幕?

当另一个应用程序的音频进来时停止播放音频

如何在Flutter中从一个屏幕导航到另一个屏幕(开始活动)并关闭当前屏幕(完成)

颤振更新状态来自另一个屏幕

在另一个屏幕显示4秒后显示一个屏幕

在React导航中更新另一个屏幕的状态

Flutter:从StreamBuilder构建器回调内部导航到另一个屏幕

如何在Swift的另一个屏幕上收听更新?

libgdx在绘制另一个屏幕时加载一个屏幕

如何从另一个屏幕在Flutter中重置表单?

如何将List <Map>的信息获取到Flutter中的另一个屏幕?

从Flutter中的另一个屏幕调用Future函数

从另一个屏幕调用功能时,useState数组未更新

ios自动从一个屏幕切换到另一个屏幕

如何使用动画从一个屏幕过渡到另一个屏幕

从另一个活动回来后如何更新选项卡活动中的列表视图

从另一个屏幕会话中开始一个屏幕会话

通过另一个屏幕会话处理屏幕

如何从一个屏幕移动到另一个屏幕 ionic 2

从另一个片段导航回来时,片段内的 ViewPager 为空

Flutter ListView 单击导航到另一个屏幕

Flutter:如何将图像文件传递到另一个屏幕

更改底部导航当前索引并从另一个屏幕类更新 setState()

在 Flutter 中,如何在主屏幕中接收图像,然后将其重定向到另一个屏幕?

使用 Flutter Provider 将数据传递到另一个屏幕

从另一个 Fragment 导航回来时自定义视图的奇怪行为

Flutter API 从一个屏幕获取和发送数据到另一个屏幕

Flutter:从另一个小部件或屏幕清除文本字段

如果导航到 Flutter 上的另一个屏幕,则停止计时器