您的当前位置:首页正文

Flutter “跳转页面”(二)

来源:华拓网

前言

写了这么多文章,有翻译文档的,有自己理解的,也不知道到底是怎么样的风格更能让人接受,希望大家能给点意见或建议。

正文

一里面已经把“页面跳转”的操作基本上都说完了,那当一个页面打开后是需要一些返回信息的时候应该怎么做呢?还是继续看原文吧

Routes can return a value 们可以返回一个值

当一个route加载到页面并需要返回一个值的时候,这个值会在pop方法返回
Navigatorpush方法会返回一个Future,这个东西可以在dart教程里面找到。这个Future会在routepop的时候处理,而这个Future的值就是pop方法里的result参数。
比如,当我们想在用户点击ok的时候去确认一个操作,这个时候我们可以await这个push的结果。await的用法也可以在dart的教程里找到。

bool value = await Navigator.push(context, new MaterialPageRoute<bool>(
  builder: (BuildContext context) {
    return new Center(
      child: new GestureDetector(
        child: new Text('OK'),
        onTap: () { Navigator.pop(context, true); }
      ),
    );
  }
));

上面的代码,如果用户按了ok键,则返回的值是true,如果用户是按的返回键,则返回值是null

当一个route被用来返回一个值的时候,这个route的参数类型必须和结果返回的类型一致,这就是为什么我们用MaterialPageRoute<bool>而不用MaterialPageRoute<void>或直接用MaterialPageRoute。(如果你就不想指定返回类型,也是可以的)

Popup routes “弹出route”

Custom routes 自定义route

你可以创建任何一个route的子类,并控制他们的动画、颜色、行为等等。PageRouteBuilder类用各种回调来控制这些,下面的例子是一个页面以旋转的方式来显示和隐藏。这个route不会让整个屏幕变灰,因为他指定了opaque:false

Navigator.push(context, new PageRouteBuilder(
  opaque: false,
  pageBuilder: (BuildContext context, _, __) {
    return new Center(child: new Text('My PageRoute'));
  },
  transitionsBuilder: (___, Animation<double> animation, ____, Widget child) {
    return new FadeTransition(
      opacity: animation,
      child: new RotationTransition(
        turns: new Tween<double>(begin: 0.5, end: 1.0).animate(animation),
        child: child,
      ),
    );
  }
));