Flutter頁面跳轉

flutter頁面跳轉分為以下幾種情況
1疟游、普通跳轉
2、通過路由跳轉
---2.1痕支、跳轉的類構造函數(shù)不帶參數(shù)
---2.2颁虐、跳轉的類構造函數(shù)帶參數(shù)

1、普通跳轉(傳遞參數(shù):通過構造器直接傳遞即可)

//導航到新路由
  void _jumpAboutPage(BuildContext context) {
//第一種寫法:
    Navigator.of(context).push(
        MaterialPageRoute(
            builder: (ctx) {
               //不攜帶參數(shù)
              return NewRoute();
               //攜帶參數(shù)(例如帶一個字符串參數(shù))
              //return NewRoute("abc");
            }
        )
    );
  }
   
void _jumpAboutPage(BuildContext context) {
//第二種寫法:
  Navigator.push( 
    context,
    MaterialPageRoute(builder: (context) {
        //不攜帶參數(shù)
        return NewRoute();
        //攜帶參數(shù)(例如帶一個字符串參數(shù))
        //return NewRoute("abc");
    }),
  );
}

2采转、路由方式

1聪廉、構造函數(shù)不帶參數(shù)

例如跳轉到如下頁面:

import 'package:flutter/material.dart';

class NewRouter extends StatelessWidget {
    //設置該頁面路由名稱字符串常量
  static const routeName = "/newRouter";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("新頁面"),
      ),
      body: Center(
        child: Text(_content),
      ),
    );
  }
}

那么router注冊在入口Widget -> MaterialApp的routes屬性里

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      //關鍵代碼在這里瞬痘,注冊路由
      routes: {
        NewRouter.routeName : (cts) => NewRouter()
      },
      //可以通過這種路由方式設置APP首次進入的頁面
      initialRoute: NewRouter.routeName,
    );
  }
}
//跳轉地方的代碼
void _jumpAboutPage(BuildContext context) {
    Navigator.pushNamed(context, NewRouter.routeName);
 }

注意:雖然構造函數(shù)中沒有帶參數(shù)故慈,但是我們通過上面的方式跳轉頁面的時候仍然可以攜帶值
方法是:
Navigator.pushNamed(context, NewRouter.routeName,arguments: "攜帶的參數(shù),這里是String框全,可以傳Object類型");
跳轉頁獲取數(shù)據(jù)的方式:在build方法中通過下面方法獲取
String _content = ModalRoute.of(context)?.settings.arguments as String;

2察绷、構造函數(shù)帶參數(shù)

例如跳轉到如下頁面:

import 'package:flutter/material.dart';

class NewRouter extends StatelessWidget {
    //設置該頁面路由名稱字符串常量
  static const routeName = "/newRouter";

  String _content;

  //構造函數(shù)帶參數(shù)
  NewRouter(this._content);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("新頁面"),
      ),
      body: Center(
        child: Text(_content),
      ),
    );
  }
}

那么router注冊在入口Widget -> MaterialApp的onGenerateRoute屬性里(原理:這里是一個鉤子,當我們使用的路由在router屬性中沒有注冊津辩,則會在onGenerateRoute里查找)

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      //  在這里設置帶參構造函數(shù)的路由
      onGenerateRoute: (settings) {
        if (settings.name == NewRouter.routeName) {
          return MaterialPageRoute(
              builder: (ctx) {
              //這里是傳送攜帶的參數(shù)拆撼,這里是傳String,所以轉String了
                return NewRouter(settings.arguments as String);
              }
          );
        }
        return null;
      },
    );
  }
}
//跳轉地方的代碼
void _jumpAboutPage(BuildContext context) {
    Navigator.pushNamed(context, NewRouter.routeName,arguments: "攜帶的參數(shù)喘沿,這里是String闸度,可以傳Object類型");
 }

總結:
1、跳轉分普通跳轉和路由跳轉
2蚜印、普通跳轉通過構造方法參數(shù)傳值
3莺禁、路由跳轉方式,根據(jù)構造方法是否有參數(shù)要區(qū)分是在routes屬性(不帶參數(shù))中注冊還是onGenerateRoute屬性(帶參數(shù))中處理
4窄赋、跳轉的方法都是Navigator.pushNamed(context, NewRouter.routeName,arguments: "攜帶的參數(shù)哟冬,這里是String楼熄,可以傳Object類型");不傳值的話就去掉arguments:
5、接收傳值的方式浩峡,要么是通過構造方法傳過來的可岂,要么就是通過String _content = ModalRoute.of(context)?.settings.arguments as String;獲取
6、頁面返回都是通過Navigator.of(context).pop();可在pop()括號中添加返回頁面時需要攜帶的數(shù)據(jù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末翰灾,一起剝皮案震驚了整個濱河市缕粹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纸淮,老刑警劉巖致开,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萎馅,居然都是意外死亡双戳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門糜芳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒货,“玉大人,你說我怎么就攤上這事峭竣√粮ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵皆撩,是天一觀的道長扣墩。 經常有香客問我,道長扛吞,這世上最難降的妖魔是什么呻惕? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮滥比,結果婚禮上亚脆,老公的妹妹穿的比我還像新娘。我一直安慰自己盲泛,他們只是感情好濒持,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寺滚,像睡著了一般柑营。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上村视,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天官套,我揣著相機與錄音,去河邊找鬼。 笑死虏杰,一個胖子當著我的面吹牛讥蟆,可吹牛的內容都是我干的。 我是一名探鬼主播纺阔,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瘸彤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笛钝?” 一聲冷哼從身側響起质况,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玻靡,沒想到半個月后结榄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡囤捻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年臼朗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝎土。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡视哑,死狀恐怖,靈堂內的尸體忽然破棺而出誊涯,到底是詐尸還是另有隱情挡毅,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布暴构,位于F島的核電站跪呈,受9級特大地震影響,放射性物質發(fā)生泄漏取逾。R本人自食惡果不足惜耗绿,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菌赖。 院中可真熱鬧缭乘,春花似錦沐序、人聲如沸琉用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邑时。三九已至,卻和暖如春特姐,著一層夾襖步出監(jiān)牢的瞬間晶丘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浅浮,地道東北人沫浆。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像滚秩,于是被迫代替她去往敵國和親专执。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容

  • 前言 Flutter(本文用的flutter是1.9.1版本)和許多其他移動應用一樣也是使用棧來管理頁面的郁油,進入一...
    sens_bingo閱讀 1,331評論 0 52
  • Flutter 中頁面跳轉通過 Navigator 和 Route 來實現(xiàn)桐腌。 一拄显、頁面跳轉 1,常規(guī)路由頁面跳轉...
    徘徊0_閱讀 5,918評論 0 3
  • 一案站、路由傳值 直接通過路由的構造方法傳遞值躬审。 我們創(chuàng)建一個TipRoute路由,它接受一個提示文本參數(shù)蟆盐,負責將傳入...
    旺仔_100閱讀 2,894評論 0 0
  • 一盒件、push方式直接跳轉 普通跳轉 帶參數(shù)跳轉和接收參數(shù) 構造函數(shù)直接傳參 跳轉后攜帶參數(shù)返回 二、命名路由跳轉 ...
    橘子有毒閱讀 11,243評論 1 4
  • 在安卓和蘋果設備上都有頁面跳轉的操作舱禽,flutter中是使用Navigator來管理頁面之間的跳轉的炒刁。在萬物皆Wi...
    黑貓警長_01閱讀 4,476評論 0 5