Flutter “跳轉(zhuǎn)頁(yè)面”(一)

“跳轉(zhuǎn)頁(yè)面”為啥加雙引號(hào)西采,其實(shí)所謂的跳轉(zhuǎn)頁(yè)面可能和以前認(rèn)識(shí)的不太一樣。因?yàn)樵?code>Flutter里继控,所有能看到的東西一般都是widget械馆,但是胖眷,沒有說(shuō)那個(gè)app是由一個(gè)頁(yè)面構(gòu)成的,所以霹崎,這個(gè)概念確實(shí)還是有的珊搀。這個(gè)功能的實(shí)現(xiàn)需要用到兩個(gè)東西RouteNavigator

Using the Navigator

Mobile apps typically reveal their contents via full-screen elements called "screens" or "pages". In Flutter these elements are called routes and they're managed by a Navigator widget. The navigator manages a stack of Route objects and provides methods for managing the stack, like Navigator.push and Navigator.pop.

班門弄斧的翻譯一下子:手機(jī)應(yīng)用們一般吧全屏的元素叫做“screens”或者“pages”尾菇。然而在Flutter里境析,我們叫做“routes”。它們用“Navigator”來(lái)管理错沽。Navigator管理了一個(gè)由Route組成的堆棧簿晓,并提供了一些方法方便去管理這個(gè)堆棧,比如說(shuō):Navigator.pushNavigator.pop

Displaying a full-screen route

Although you can create a navigator directly, it's most common to use the navigator created by a WidgetsApp or a MaterialApp widget. You can refer to that navigator with Navigator.of.
A MaterialApp is the simplest way to set things up. The MaterialApp's home becomes the route at the bottom of the Navigator's stack. It is what you see when the app is launched.

盡管你可以直接創(chuàng)建一個(gè)navigator千埃,但是最常用的還是通過(guò)WidgetsAppMaterialApp這兩個(gè)widget憔儿,你可以參考Navigator.of
MaterialApp是最簡(jiǎn)單的一個(gè)方式放可。MaterialApphome則會(huì)成為Navigator棧的底端谒臼,就是當(dāng)app剛啟動(dòng)的時(shí)候你看到的那個(gè)東西。eg:

void main() {
  runApp(new MaterialApp(home: new MyAppHome()));
}

To push a new route on the stack you can create an instance of MaterialPageRoute with a builder function that creates whatever you want to appear on the screen. For example:

如果你想在棧里放一個(gè)新route的話耀里,你可以通過(guò)一個(gè)builder方法來(lái)創(chuàng)建一個(gè)MaterialPageRoute對(duì)象蜈缤。eg:

Navigator.push(context, new MaterialPageRoute<void>(
  builder: (BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('My Page')),
      body: new Center(
        child: new FlatButton(
          child: new Text('POP'),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
      ),
    );
  },
));

新的route通過(guò)Navigatorpop方法可以被出棧,返回app的首頁(yè)冯挎。

Navigator.pop(context);

The route defines its widget with a builder function instead of a child widget because it will be built and rebuilt in different contexts depending on when it's pushed and popped.

這個(gè)route之所以用builder方法來(lái)定義而不是直接用一個(gè)widget底哥,是因?yàn)樗谶M(jìn)出棧的時(shí)候需要根據(jù)不同的上下文來(lái)進(jìn)行構(gòu)建。

It usually isn't necessary to provide a widget that pops the Navigator in a route with a Scaffold because the Scaffold automatically adds a 'back' button to its AppBar. Pressing the back button causes Navigator.popto be called. On Android, pressing the system back button does the same thing.

通常情況下房官,如果用的是Scaffold的話趾徽,是不需要我們手動(dòng)去添加一個(gè)返回按鈕的。它會(huì)自動(dòng)的在左上角添加一個(gè)返回按鈕翰守,點(diǎn)擊這個(gè)返回按鈕就會(huì)調(diào)用Navigator.pop方法孵奶,在安卓上,按壓系統(tǒng)的返回按鈕效果是一樣的蜡峰。

Using named navigator routes 使用命好名的route

Mobile apps often manage a large number of routes and it's often easiest to refer to them by name. Route names, by convention, use a path-like structure (for example, '/a/b/c'). The app's home page route is named '/' by default.

app通常需要管理大量的route了袁,并且他們經(jīng)常很容易的通過(guò)名字來(lái)找到它們。route的名字湿颅,按照慣例载绿,用類似路徑的結(jié)構(gòu)(比如:‘a(chǎn)/b/c’)。app的首頁(yè)路徑默認(rèn)為'/'

The MaterialApp can be created with a Map<String, WidgetBuilder> which maps from a route's name to a builder function that will create it. The MaterialApp uses this map to create a value for its navigator's onGenerateRoute callback.

MaterialApp創(chuàng)建的時(shí)候可以帶著一個(gè)Map油航,而這個(gè)Map描述了route的名字和對(duì)應(yīng)的builder方法崭庸。MaterialApp就是根據(jù)這個(gè)Map在navigatoronGenerateRoute回調(diào)里創(chuàng)建對(duì)應(yīng)的route

void main() {
  runApp(new MaterialApp(
    home: new MyAppHome(), // becomes the route named '/'
    routes: <String, WidgetBuilder> {
      '/a': (BuildContext context) => new MyPage(title: 'page A'),
      '/b': (BuildContext context) => new MyPage(title: 'page B'),
      '/c': (BuildContext context) => new MyPage(title: 'page C'),
    },
  ));
}

個(gè)人認(rèn)為,這種寫法類似于Android里面清單文件的作用。

Navigator.pushNamed(context, '/b');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀自,一起剝皮案震驚了整個(gè)濱河市揉稚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熬粗,老刑警劉巖搀玖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驻呐,居然都是意外死亡灌诅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門含末,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猜拾,“玉大人,你說(shuō)我怎么就攤上這事佣盒】嫱啵” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵肥惭,是天一觀的道長(zhǎng)盯仪。 經(jīng)常有香客問我,道長(zhǎng)蜜葱,這世上最難降的妖魔是什么全景? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮牵囤,結(jié)果婚禮上爸黄,老公的妹妹穿的比我還像新娘。我一直安慰自己揭鳞,他們只是感情好炕贵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著汹桦,像睡著了一般鲁驶。 火紅的嫁衣襯著肌膚如雪鉴裹。 梳的紋絲不亂的頭發(fā)上舞骆,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音径荔,去河邊找鬼督禽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛总处,可吹牛的內(nèi)容都是我干的狈惫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胧谈!你這毒婦竟也來(lái)了忆肾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤菱肖,失蹤者是張志新(化名)和其女友劉穎客冈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稳强,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡场仲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了退疫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠缕。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖褒繁,靈堂內(nèi)的尸體忽然破棺而出亦鳞,到底是詐尸還是另有隱情街夭,我是刑警寧澤棚品,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站诬乞,受9級(jí)特大地震影響俊抵,放射性物質(zhì)發(fā)生泄漏谁不。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一徽诲、第九天 我趴在偏房一處隱蔽的房頂上張望刹帕。 院中可真熱鬧,春花似錦谎替、人聲如沸偷溺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挫掏。三九已至,卻和暖如春秩命,著一層夾襖步出監(jiān)牢的瞬間尉共,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工弃锐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袄友,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓霹菊,卻偏偏與公主長(zhǎng)得像剧蚣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,331評(píng)論 0 10
  • 石頭的遙控飛機(jī)還沒有開始玩就掛在了樹上鸠按,這件事對(duì)石頭的心靈造成了很大的創(chuàng)傷礼搁。石頭一開始還滿懷希望,希望刮大風(fēng)把...
    粗腰小胖腿閱讀 320評(píng)論 0 0
  • 這兩天目尖,閱讀美籍作家伍綺詩(shī)的長(zhǎng)篇小說(shuō)《無(wú)聲告白》叹坦,當(dāng)讀到莉迪亞自殺前的心理活動(dòng)時(shí),淚流滿面卑雁,現(xiàn)摘錄出來(lái): 還不算太...
    寶貝豆叮閱讀 498評(píng)論 0 0