一区二区三区欧美日韩-一区二区三区欧美-一区二区三区免费在线视频-一区二区三区免费在线观看-久久精品店-久久精品第一页

歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
電話圖標 余先生:13699882642

網(wǎng)站百科

為您解碼網(wǎng)站建設(shè)的點點滴滴

Flutter 路由跳轉(zhuǎn)

發(fā)表日期:2018-12 文章編輯:小燈 瀏覽次數(shù):2128

Flutter 中,一切皆 Widget !!!!

Remember: Screens are Just Widgets?.

今天來學(xué)習(xí)一下 Flutter 中常用的一些跳轉(zhuǎn)方式。在安卓中我們常用的跳轉(zhuǎn)是通過 Intent 跳轉(zhuǎn)到 新的頁面(Activity) 中,Intent 其實就可以簡單的等價于 一種路由。
跳轉(zhuǎn)的實現(xiàn)包括簡單的跳轉(zhuǎn)&返回;帶數(shù)據(jù)跳轉(zhuǎn);跳轉(zhuǎn)后回傳數(shù)據(jù)等等,接下里我們就將這些場景適配到 Flutter 中。
在 Flutter 中,頁面跳轉(zhuǎn)需要用到路由 Navigator.

1.跳轉(zhuǎn)到新頁面并返回

摘自官網(wǎng)

1. Create two screens
2. Navigate to the second screen using Navigator.push
3. Return to the first screen using Navigator.pop

意思是跳轉(zhuǎn)到新頁面使用 Navigator.push() 方法,返回上個頁面使用 Navigator.pop() 方法

接下來就創(chuàng)建兩個簡單的頁面,TestScreen.dart, TestScreen2.dart兩個頁面

TestScreen.dart:class TestScreenState extends State<TestScreen> {@overrideWidget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text("第一頁"),),body: Center(child: new GestureDetector(onTap: () {},child: Text("跳轉(zhuǎn)到第二個頁面"),),),);}} 
TestScreen2.dartclass TestScreen2State extends State<TestScreen2> {@overrideWidget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text("第二頁"),),body: Center(child: new GestureDetector(onTap: () {},child: Text("我是第二個頁面"),),),);}} 

很簡單的兩個頁面,居中顯示一個 文本 控件。然后給他設(shè)置了手勢實現(xiàn)點擊事件。現(xiàn)在開始給第一個頁面添加點擊事件處理,直接調(diào)用 Navigator.push()方法,參數(shù)需要傳遞一個 Route 對象。Route 我們可以自己創(chuàng)建一個,也可以使用系統(tǒng)給我們提供的 MaterialPageRoute

如下:

onTap: () {Navigator.push(context,MaterialPageRoute(builder: (context) => TestScreen2()));}, 

現(xiàn)在我們在第二個頁面了,那么怎么回到第一個頁面呢?

此時需要調(diào)用 Navigator.pop(context) 即可回到上個頁面了~

2.傳遞數(shù)據(jù)到新頁面

簡單的通過實體類傳遞一組信息。

先創(chuàng)建一個實體類,此處建了一個 User 類保存了 name和 age 兩個字段信息

class User {final String name;final int age;User(this.name, this.age);} 

然后在第一個頁面中的點擊事件的時候創(chuàng)建一個 User 對象,并傳入 Screen2 的構(gòu)造中

onTap: () {User xiaoming = new User("小明",25);Navigator.push(context,MaterialPageRoute(builder: (context) => TestScreen2(user: xiaoming)));}, 

Screen2 的處理

 class TestScreen2 extends StatelessWidget {final User user;const TestScreen2({Key key, this.user}) : super(key: key);@overrideWidget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text("第二頁",style: shenshen(color: Colors.greenAccent),),),body: Center(child: new GestureDetector(onTap: () {Navigator.pop(context);},child: Text("傳過來的的 User name = ${[user.name](http://user.name)}, age = ${user.age}",style: TextStyle(fontSize: 28.0, color: Colors.redAccent),),),),);}} 

上邊的例子中是用 StagelessWidget 接收的參數(shù),但是我們開發(fā)中用的最多的肯定是 StagefulFidget,那么該怎么處理呢?

其實也不難,也是通過構(gòu)造函數(shù)的形式傳遞,但是傳遞過去之后,User是留存在 TestScreen2 這個 Class 中的,那么我們需要在 他的 TestScreenState 這個 Class 中使用,那么怎么用呢?只需要在 state 這個 Class 中,調(diào)用 widget.user 就能獲取 user對象了。簡單吧~

class TestScreen2 extends StatefulWidget {final User user;const TestScreen2({Key key, this.user}) : super(key: key);@overrideState<StatefulWidget> createState() => TestScreen2State();}class TestScreen2State extends State<TestScreen2> {@overrideWidget build(BuildContext context) {**var localUser = widget.user;**return new Scaffold(appBar: AppBar(title: Text("第二頁",style: TextStyle(color: Colors.greenAccent),),),body: Center(child: new GestureDetector(onTap: () {Navigator.pop(context);},child: Text("StatefulWidget:傳過來的的 User name = ${[localUser.name](http://localUser.name)}, age = ${localUser.age}",style: TextStyle(fontSize: 28.0, color: Colors.redAccent),),),),);}} 

3.新頁面?zhèn)鬟f數(shù)據(jù)給舊頁面

在 Android 開發(fā)中,我們可能會用到 startActivityForResult 等類似的方法實現(xiàn),從 B 頁面 回到 A 頁面的時候帶回來一些數(shù)據(jù),那么這種場景怎么在 Flutter 中實現(xiàn)呢?

當然了還是直接使用 Navigator.pop() 方法,第二個參數(shù)就是你傳遞回去數(shù)據(jù)啦~

然后在第一個頁面中,使用異步方式,調(diào)用的 push() 方法,就會獲取 傳遞過來的信息了

_startNewPageAndeGetReturnData(BuildContext context) async {User xiaoming = new User("小明", 25);final result = await Navigator.push(context,MaterialPageRoute(builder: (context) => TestScreen2(user: xiaoming)));print("這地方打印的是新頁面?zhèn)鬟f回來的信息:"+[result.name](http://result.name) +" "+ result.age.toString());} 

4.共享動畫跳轉(zhuǎn)


本頁內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認為本網(wǎng)頁中由涉嫌抄襲的內(nèi)容,請及時與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會在5工作日內(nèi)聯(lián)系您,一經(jīng)查實,本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://www.junxiaosheng.cn/17591.html
相關(guān)APP開發(fā)
 八年  行業(yè)經(jīng)驗

多一份參考,總有益處

聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費獲得網(wǎng)站建設(shè)方案及報價

咨詢相關(guān)問題或預(yù)約面談,可以通過以下方式與我們聯(lián)系

業(yè)務(wù)熱線:余經(jīng)理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

主站蜘蛛池模板: 99久久亚洲综合精品| 久久99re2在线视频精品| 免费亚洲视频| 久久国产精品福利影集| 色多多旧版污污破解版| 4480YY旧里番在线播放| 国产在线精彩亚洲久久| 日韩一区二区三区视频在线观看| 在线观看日本免费| 国产亚洲精品网站在线视频| 人妻夜夜爽99麻豆AV| 91羞羞视频| 久久re视频这里精品09免费| 午夜伦理网| 国产 亚洲 日韩 欧美 在线观看| 年轻的朋友4在线看中文字幕| 一个人的视频在线观看免费观看| 国产乱色伦影片在线观看| 任你懆视频 这里只有精品| 97人妻丰满熟妇AV无码| 公开超碰在线视频| 欧美人与动牲交A精品| 2020国产成人精品视频人| 护士被老头边摸边吃奶的视频| 思思99精品国产自在现线| 成人网18免费韩国| 欧洲电影巜肉欲丛林| 99在线国产视频| 免费毛片播放| 51精品国产AV无码久久久密桃| 久久成人伊人欧洲精品AV| 亚洲青青草原| 后入式狂顶免费视频| 亚洲国产精品无码AV久久久| 国产伦精品一区二区免费| 忘忧草在线社区WWW日本-韩国| 俄罗斯6一9泑女网站| 日韩精品人成在线播放| 别插我B嗯啊视频免费| 青草久久影院| 成人国产亚洲欧美成人综合网 |