• YJ
    2019-08-19
    使用的是Navigator.push
     A->B->C->D,
    请问如何 D页面 pop 到 B 呢?

    作者回复: Navigator.popUntil(context,ModalRoute.withName('B'));

    
     14
  • 和小胖
    2019-09-24
    在敲代码时候的有两点需要注意的地方。

    1、在传入 runApp 里面的 widget 里面做路由跳转的时候所使用的的 BuildContext 不能是 App 的,必须得是 widget 的,否则会报 Navigator operation requested with a context that does not include a Navigator 这样子的错。

    2、使用命名路由或者注册表的方式,最好是在传入 runApp 里面的 widget 的MaterialApp 里面做 routes 的配置,为的是 APP 一启动的时候就注册上,否则可能会存在要使用命名,可是还没注册的情况,就会报 Could not find a generator for route RouteSettings("second_page", null) in the _WidgetsAppState 这样的错误。
    展开

    作者回复: 赞👍

    
     4
  • 入魔的冬瓜
    2019-10-18
    自己手动push一个route的话,可以通过构造函数进行传参数。
    使用命名路由的话,参数的读取通过ModalRoute.of(context).settings.arguments,这个操作要放在build里面操作。这种情况,有没有什么办法也是通过构造函数传参数,在build之前就可以拿到参数。(类似第三方fluro框架)

    作者回复: 命名路由没有提供这样的接口,如果想这样做的话,可以自己实现一套注册路由的注解,在编译期初始化页面的时候把参数传过去

    
     2
  • cv0cv0
    2019-12-21
    WP 真是最优雅的系统。
    
    
  • 巫
    2019-10-22
    把所有命名路由都定义在一起会很多,也不利于模块化,能否在模块中定义路由呢?另外,有没有子路由的概念呢?

    作者回复: 你可以试试用注解的方式结偶,在运行期统一收集注册

    
    
  • 肖
    2019-10-21
    老师你好,showdialog也是进行了路由跳转,为什么会出现在当前界面上面,而普通的都是跳到另外一个新的界面

    作者回复: 底层element与render object渲染的样式不一样而已

    
    
  • 巫山老妖
    2019-10-07
    第二道思考题:
    传参:
    RaisedButton(
                child: Text('命名路由(参数&回调)'),
                onPressed: () =>
                    Navigator.pushNamed(context, "third_page", arguments: [1, 2])
                        .then((msg) {
                  setState(() {
                    _msg = msg;
                  });
                })

    计算并返回:

    class ThirdPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        var args = ModalRoute.of(context).settings.arguments as List<int>;

        int sum = args[0] + args[1];
        print(sum);

        return Scaffold(
          appBar: AppBar(
            title: Text('Third Screen'),
          ),
          body: Column(
            children: <Widget>[
              Text('Message from first screen: $args'),
              RaisedButton(
                child: Text('back'),
                onPressed: ()=> Navigator.pop(context, "${sum}"),
              )
            ],
          ),
        );
      }
    }
    展开

    作者回复: 赞👍

    
    
  • 严旭珺
    2019-10-05
    老师好,请问一下,如果是类似于Android中打开页面 A->B->A,标准的启动模式,栈中有2个A页面该怎么办呢?我试了试B页面Navigator.pushName(context,A),会黑屏

    作者回复: 有几个A都可以啊,因为每个A都是不同的实例。

    
    
  • 和小胖
    2019-09-24
    第二个问题:可以构造一个 list 传递过去,然后对 list 中数据的两个数字求和再把结果带回上个页面。

    另外老师通过 arguments 是不是只能传递一个参数呀?

    作者回复: 只能传一个参数,如果需要多个参数,传Map或者List都可以

    
    
  • 高超
    2019-09-03
    问:对于基本路由,如何传递页面参数?
    答:1. 使用构造函数传参
          2. MaterialPageRoute 加入参数 setting: RouteSettings 。第二个页面获取逻辑和命令路由就一样了。

    作者回复: 赞

    
    
  • YJ
    2019-08-28
    原来是个使用是可以混合使用的
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context){
                          return CarStockPage();
                        }));
    Navigator.pushNamed(context, YJRouters.clue_page);
    两种方式结合场景可以混合使用,就可以满足相当复杂的路由跳转逻辑了!!!
    展开
    
    
  • 大恒数据
    2019-08-28
    讲的简单了一点,YJ同学的问题才是实际场景遇到的
    
    
  • YJ
    2019-08-20
    陈老师请问?
    使用的是Navigator.push
     A->B->C->D,
    如何 让D页面 pop 到 B 呢?

    作者回复: Navigator.popUntil(context,ModalRoute.withName('B'));

     2
    
  • 汪帅
    2019-08-18
    其实我一直想知道这个课程的样例代码在哪里?之前见过有人留言中问过但是也没看到有回复具体地址。现在找那条留言也找不到了,其它课程都有对应的样例代码在github上面,如果有在每篇下面附加上代码地址不可以么?

    作者回复: 谢谢你的建议,课程的样例代码参见
    https://github.com/cyndibaby905/flutter_core_demo

    
    
  • 竹之同学
    2019-08-16
    对于基本路由,其实路由返回的就是那个新页面初始化的实例,所以可以在页面 Widget 定义变量,然后在路由返回,也就是实例化的时候传值进去。

    作者回复: 对的

    
    
  • Mr.J
    2019-08-15
    在新建页面的时候通过构造函数传的参数

    作者回复: 对的

    
    
  • 亡命之徒
    2019-08-15
    class MySecondPage extends StatelessWidget {
      String msg;
      MySecondPage({
        Key key,
        this.msg
      }):super(key:key);
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        MyThreePage tsp = new MyThreePage();
        //基本路由传递参数
        tsp.msg = "我来自第二个页面";
        return Scaffold(
          appBar: AppBar(title: Text("SecondPage"),),
          body: RaisedButton(
            child: Text("MyEvent Bus$msg"),
            onPressed: () {
              myEventBus.fire(MyCustomEvent("Hello World"));
              Navigator.pop(context);
            },
          ),
          floatingActionButton: FloatingActionButton(
            child: Icon(Icons.pages),
            onPressed: (){
              Navigator.push(context, MaterialPageRoute(builder: (context)=>tsp));
            },
          ),
        );
      }
    }

    MySecondPage sp = new MySecondPage();
        sp.msg = "我传给你了哈哈哈";
    onPressed: ()=>Navigator.push(context,MaterialPageRoute(builder: (context)=>sp)),
    可以通过这种方式传递
    展开

    作者回复: 赞,不过直接通过构造函数传进去会更好

    
    
  • colin
    2019-08-15
    context 会细讲吗? 感觉不是很懂

    作者回复: 理解成创建widget的上下文就可以了。context实际是element,是为了阻止直接对element操作而抽象出来的一个概念

    
    
  • 许童童
    2019-08-15
    对于基本路由,如何传递页面参数?
    能过MaterialPageRoute 的 settings 属性。

    作者回复: 初始化的时候直接通过属性传值就可以了

    
    
我们在线,来聊聊吧