flutter 路由

Navigator

參數(shù)

  • push 將設置的router信息推送到Navigator上,實現(xiàn)頁面跳轉。
  • of 主要是獲取 Navigator最近實例的好狀態(tài)。
  • pop 導航到新頁面,或者返回到上個頁面。
  • canPop 判斷是否可以導航到新頁面
  • maybePop 可能會導航到新頁面
  • popAndPushNamed 指定一個路由路徑,并導航到新頁面。
  • popUntil 反復執(zhí)行pop 直到該函數(shù)的參數(shù)predicate返回true為止。
  • pushAndRemoveUntil 將給定路由推送到Navigator,刪除先前的路由,直到該函數(shù)的參數(shù)predicate返回true為止。
  • pushNamed 將命名路由推送到Navigator。
  • pushNamedAndRemoveUntil 將命名路由推送到Navigator,刪除先前的路由,直到該函數(shù)的參數(shù)predicate返回true為止。
  • pushReplacement 路由替換。
  • pushReplacementNamed 這個也是替換路由操作。推送一個命名路由到Navigator,新路由完成動畫之后處理上一個路由。
  • removeRoute 從Navigator中刪除路由,同時執(zhí)行Route.dispose操作。
  • removeRouteBelow 從Navigator中刪除路由,同時執(zhí)行Route.dispose操作,要替換的路由是傳入?yún)?shù)anchorRouter里面的路由。
  • replace 將Navigator中的路由替換成一個新路由。
  • replaceRouteBelow 將Navigator中的路由替換成一個新路由,要替換的路由是是傳入?yún)?shù)anchorRouter里面的路由。

push

// 不傳參
Navigator.push(
    context,
    new MaterialPageRoute(builder: (context) => new SecondScreen()),
);

//傳參
Navigator.push(
  context,
  new MaterialPageRoute(
    builder: (context) => new ContentScreen(articles[index]),
  ),
);
// 不同寫法
Navigator.push<String>(context, new MaterialPageRoute(
  builder: (BuildContext context) {
    return new Add(title: i.toString());
  },
));
// 接收
final Article article;
ContentScreen(this.article);

final String title;   // 儲存?zhèn)鬟f過來的參數(shù)
Add({this.title});

pop

// 不傳參
Navigator.pop(context);
// 傳參
Navigator.pop(context, 'Like');
// 接收
void add() async{
    String result = await Navigator.push(context, MaterialPageRoute(
      builder: (BuildContext context) {
        return new Add();
      },
    ));
    
    print(result);
}

定制路由動畫

onTap: () async {
  String result = await Navigator.push(
      context,
      new PageRouteBuilder(
        transitionDuration: const Duration(milliseconds: 1000),
        pageBuilder: (context, _, __) =>
            new ContentScreen(articles[index]),
        transitionsBuilder:
            (_, Animation<double> animation, __, Widget child) =>
                new FadeTransition(
                  opacity: animation,
                  child: new RotationTransition(
                    turns: new Tween<double>(begin: 0.0, end: 1.0)
                        .animate(animation),
                    child: child,
                  ),
                ),
      ));

  if (result != null) {
    Scaffold.of(context).showSnackBar(
      new SnackBar(
        content: new Text("$result"),
        duration: const Duration(seconds: 1),
      ),
    );
  }
},

命名導航器路由(MaterialApp)

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Navigation',
      initialRoute: '/',
      routes: <String, WidgetBuilder>{
        '/': (BuildContext context) => new ArticleListScreen(),
        '/new': (BuildContext context) => new NewArticle(),
      },
    );
  }
}

// 跳轉
Navigator.of(context).pushNamed('/new');
Navigator.pushNamed(context, '/b');

pushNamed

普通跳轉

pushReplacementNamed

跳轉新頁面并且替換原頁面,比如登錄頁跳轉主頁, 當新的頁面進入后,之前的頁面將執(zhí)行dispose方法

Navigator.of(context).pushReplacementNamed('/home');

pushReplacement

同pushReplacementNamed 寫法不同 可傳遞參數(shù)

Navigator.of(context).pushReplacement(new MaterialPageRoute(builder: (context) => new Home()));

popAndPushNamed

銷毀當前頁面并跳轉指向新的頁面 動畫不太友好

pushNamedAndRemoveUntil

跳轉到新的路由,并且關閉給定路由的之前的所有頁面

指將制定的頁面加入到路由中,然后將其他所有的頁面全部pop, (Route route) => false將確保刪除推送路線之前的所有路線。 這時候將打開一個新的screen4頁面

Navigator.of(context).pushNamedAndRemoveUntil('/home', (route) => route == null);

// 到red為止
Navigator.of(context).pushNamedAndRemoveUntil('/home', ModalRoute.withName('/red'));

pushAndRemoveUntil

同pushNamedAndRemoveUntil 寫法不同 可傳遞參數(shù)

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => new Home()), ModalRoute.withName('/home'));

popUntil

pop直到...為止

Navigator.of(context).popUntil(ModalRoute.withName('/red'));

傳參onGenerateRoute

onGenerateRoute : 生成路由的回調函數(shù),當導航的命名路由的時候,會使用這個來生成界面

// 跳轉
Navigator.of(context).pushNamed('/add/' + i.toString());

// 定義
class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'TODO',
      theme: new ThemeData(
        primaryColor: Colors.purple,
      ),
      home: new Home(),
      routes: <String, WidgetBuilder>{
        '/add': (context) => new Add()
      },
      onGenerateRoute: (RouteSettings settings) {
        print(settings);
        WidgetBuilder builder;
        if (settings.name == '/') {
          builder = (BuildContext context) => new Add();
        } else {
          String param = settings.name.split('/')[2];
          builder = (BuildContext context) => new Add();
        }

        return new MaterialPageRoute(builder: builder, settings: settings);
      }
    );
  }
}

MaterialPageRoute

屬于MaterialApp下面的一個路由方法

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容