当前位置: 首页 > 知识库问答 >
问题:

弹出时强制颤振导航器重新加载状态

卫烨烁
2023-03-14
    null

共有1个答案

逑阳泽
2023-03-14

你可以在这里做几件事。@Mahi的答案虽然正确,但可能更简洁一点,实际上使用推,而不是OP询问的showDialog。这是一个使用navigator.push:

import 'package:flutter/material.dart';

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.green,
      child: Column(
        children: <Widget>[
          RaisedButton(
            onPressed: () => Navigator.pop(context),
            child: Text('back'),
          ),
        ],
      ),
    );
  }
}

class FirstPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new FirstPageState();
}

class FirstPageState extends State<FirstPage> {

  Color color = Colors.white;

  @override
  Widget build(BuildContext context) {
    return new Container(
      color: color,
      child: Column(
        children: <Widget>[
          RaisedButton(
            child: Text("next"),
            onPressed: () async {
              final value = await Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => SecondPage()),
                ),
              );
              setState(() {
                color = color == Colors.white ? Colors.grey : Colors.white;
              });
            },
          ),
        ],
      ),
    );
  }
}

void main() => runApp(
      MaterialApp(
        builder: (context, child) => SafeArea(child: child),
        home: FirstPage(),
      ),
    );

但是,有另一种方法可以很好地适合您的用例。如果使用global作为影响第一页构建的内容,可以使用InheritedWidget定义全局用户首选项,每次更改首选项时,将重新生成第一页。这甚至可以在无状态小部件中工作,如下所示(但也应该在有状态小部件中工作)。

flutter中inheritedWidget的一个例子是应用程序的主题,尽管他们在小部件中定义了它,而不是像我这里那样直接构建它。

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

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.green,
      child: Column(
        children: <Widget>[
          RaisedButton(
            onPressed: () {
              ColorDefinition.of(context).toggleColor();
              Navigator.pop(context);
            },
            child: new Text("back"),
          ),
        ],
      ),
    );
  }
}

class ColorDefinition extends InheritedWidget {
  ColorDefinition({
    Key key,
    @required Widget child,
  }): super(key: key, child: child);

  Color color = Colors.white;

  static ColorDefinition of(BuildContext context) {
    return context.inheritFromWidgetOfExactType(ColorDefinition);
  }

  void toggleColor() {
    color = color == Colors.white ? Colors.grey : Colors.white;
    print("color set to $color");
  }

  @override
  bool updateShouldNotify(ColorDefinition oldWidget) =>
      color != oldWidget.color;
}

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var color = ColorDefinition.of(context).color;

    return new Container(
      color: color,
      child: new Column(
        children: <Widget>[
          new RaisedButton(
              child: new Text("next"),
              onPressed: () {
                Navigator.push(
                  context,
                  new MaterialPageRoute(builder: (context) => new SecondPage()),
                );
              }),
        ],
      ),
    );
  }
}

void main() => runApp(
      new MaterialApp(
        builder: (context, child) => new SafeArea(
              child: new ColorDefinition(child: child),
            ),
        home: new FirstPage(),
      ),
    );
 类似资料:
  • 是否有任何方法可以从代码中删除空安全检查,或者我现在被迫进行迁移?(工作量很大)。

  • 使用不包含导航器的上下文请求的导航器操作 完整代码在这里 完全错误代码 : ══╡ 用手势捕捉异常╞═══════════════════════════════════════════════════════════════════ I/颤振(3551):处理手势时抛出以下断言:I/颤振(3551):使用不包含导航器的上下文请求的导航器操作。I/flatter(3551):用于从导航器推送或弹出

  • 所以我的控制器的结构可能是造成这种情况的原因。在这里您可以看到父控制器和子控制器,但重要的部分在这里: 父控制器 子控制器 如果刷新页面,或者从应用程序外部导航到页面(任何导致页面完全加载的内容),版本就会工作。导航到此时,为空,此方法失败。 因此,当“深度链接”或刷新时,以及当进行内部导航时,应用程序加载控制器的顺序是不同的。如何从具有父子关系的角度控制器获得一致的负载行为?

  • 我目前正在尝试将类加载到我的应用程序中,这样我就可以过滤掉那些不包含任何test/-方法的类。我希望以后在我的应用程序中运行这些测试。 到目前为止,一切都很好-除了我正在使用的(或者可能是任何)似乎没有实际重新加载位于我的应用程序类路径上的类。 更准确地说,我的应用程序的用户首先选择一些源文件。然后将它们复制到临时位置,并将许多正则表达式匹配/替换对应用于原始源文件的副本。接下来,拷贝被编译,然后

  • 问题内容: 我会尽力解释这一点。 我有一个应用程序可以在页面上显示50多个项目。用户可以单击单个项目,然后转到页面以更新项目信息。一切工作正常,除了在用户完成更新单个项目信息并在浏览器上单击“后退”按钮到上一个按钮之后。旧项目信息(更新前)仍然存在。用户必须单击刷新才能查看更新的信息。不错,但我希望提供更好的用户体验。有解决这个问题的主意吗?非常感谢。 问题答案: 我认为您必须使用JS才能使此工作