穿梭在不同的畫面中 - 固定名稱路由法
WriterShelf™ is a unique multiple pen name blogging and forum platform. Protect relationships and your privacy. Take your writing in new directions. ** Join WriterShelf**
WriterShelf™ is an open writing platform. The views, information and opinions in this article are those of the author.
Like
or Dislike
About the Author
很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
就,這會一點點,那會一點點⋯⋯
More to explore
如前文所述,Flutter 有四種 Navigation & Routing 的方式:
我們已經學過了「N1/直接導航法」,這種直接導航的方式,說直白的,就是把要去的 screen 包成一個 Route,好處是很直接,小缺點是如果常常要去這個 screen,就要寫很多次,所以接下來這種,「N2 / 固定名稱路由法」,說白了,就是一個懶人法,把所有的 screens 列一個表,再給每個 screen 對應一個「路徑名稱」,這樣如果要重複呼叫,就簡單多了。
N2 / 固定名稱路由法
其實這種用「路徑名稱」的方法在各種網站的開發平台上,早就已經用很久了,就叫 routes,路由,Flutter 也沒搞怪,一樣也叫做 routes,用法也很簡單:
講半天,不如直接上碼,如果你剛進來,我們目前的程式碼的開發是停留在這裡:
Flutter 程式寫作風格與管理 Code Organization — 將程式碼依照功能,放入適當的 folder 中,及,取一個好的名稱...
WriterShelf 思書: 紅寶鐵軌客
我們會從這裡開始修改程式,如果你是中途插隊進來了,可以打開來參考裡面的程式碼。
先打開 main.dart,routes 是要寫在 MaterialApp 這個 Widget 裡面:
我們只改了以下:
再來就是將原來的 Navigator.push () 改成 Navigator.pushNamed(路徑名稱),我們目前只有一個 screen 有直接連結跳轉,就是 MyHomePage.dart,打開它,把 push() 改成 pushName(/audio):
我們也只改了一行,找到 FloatingActionButton 中的 onPressed,也就是上圖的第 4 行,將原先的落落長的 Navigator.push( content, MaterialPageRoute......... ) 改成很精簡的 Navigator.pushNamed( context, '/audio' ),就好了,這樣是不是看起來清爽多了。
這樣就改好了。啥!就只改了四行程式碼!沒錯,就是這麼簡單。
好啦,現在我們可以試試看了,請使用 Web 模擬器(因為 App 沒有網址列),執行 run,很好,如我們所預期的,我們看到路徑名稱 audio 出現在網址上了,如下圖:
我們也稱這種網址為「友善網址」:一個讓使用者可以讀懂的網址。
很不幸的,這也不是我們要的導航方式,我們需要一個網址可以直接連到錄音檔的:url.com/audio/class1,但是我們有更接近了。
除此之外,這方法還有其他問題:
更多的 navigation 功能
當所有的 screens 都有路徑名稱後,navigator 可以做的事就不止是 push/pop/pushName() 這種「簡單」的堆疊動作而已了,它可以做的更多的「堆疊更改」動作了,例如:
此外,navigator 還有兩個很有趣的 stack 檢查:
Navigator.push(content, route)
vs.
Navigator.of(content).push(route)
這兩個有什麼不同?答案是一樣的,不過使用 Navigator.of(content) 時有多兩個選擇性的參數:
所以,如果你不需要這兩個功能:Navigator.push(...) = Navigator.of(...).pop(...),兩個寫法是一樣的。
這個導航方式也不是我們要的,下一種切換網址的方式會更好嗎?讓我們繼續「試」下去吧!