Flutter中的路由使用

Flutter中提供了兩種配置路由跳轉(zhuǎn)的方式:1诺擅、基本路由;2谴分、命名路由

一锈麸、基本路由

1.引入將要跳轉(zhuǎn)的頁面

import 'package:flutter_learn/search.dart';

2.點(diǎn)擊按鈕跳轉(zhuǎn)

Navigator.of(context)
  .push(MaterialPageRoute(builder: (context) => SearchPage()));

3.如果需要傳值,在SearchPage里面新寫構(gòu)造方法牺蹄,在跳轉(zhuǎn)時(shí)進(jìn)行傳值

//search頁面
import 'package:flutter/material.dart';
class SearchPage extends StatelessWidget {
  String title;
  SearchPage({this.title = "搜索"});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(this.title),
      ),
      body: Container(
        child: Text("搜索頁面內(nèi)容區(qū)域"),
      ),
    );
  }
}
//跳轉(zhuǎn)方法
Navigator.of(context).push(MaterialPageRoute(
   builder: (context) => SearchPage(title: "搜索頁面",))
);

4.返回上一級頁面

//返回上一級
Navigator.of(context).pop();
二忘伞、命名路由

為了在項(xiàng)目中可以統(tǒng)一管理跳轉(zhuǎn),可以使用Flutter提供的命名路由
1.配置路由沙兰,命名路由需要定義在根組件里面

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: Color(0xffFFFFFF),
      ),
      home: Tabs(),
      //配置命名路由
      routes: {
        '/search': (context)=>SearchPage()
      },
    );
  }
}

2.跳轉(zhuǎn)下一個(gè)頁面

//命名路由跳轉(zhuǎn)氓奈,/search必須與根組件中配置命名路由的名稱一致
Navigator.pushNamed(context, '/search');
三、命名路由的跳轉(zhuǎn)傳值
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final routes = {
    '/search': (context)=>SearchPage()
  };
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: Color(0xffFFFFFF),
      ),
      home: Tabs(),
      //命名路由的跳轉(zhuǎn)傳值
      onGenerateRoute: (RouteSettings settings) {
        final String name = settings.name;
        final Function pageContentBuilder = this.routes[name];
        if (pageContentBuilder != null) {
          if (settings.arguments != null) {
            final Route route = MaterialPageRoute(
              builder: (context) => pageContentBuilder(context, arguments: settings.arguments)
            );
            return route;
          } else {
            final Route route = MaterialPageRoute(
              builder: (context) => pageContentBuilder(context)
            );
            return route;
          }
        } else {
          final Route route = MaterialPageRoute(
            builder: (context) => pageContentBuilder(context)
          );
          return route;
        }
      },
    );
  }
}
//跳轉(zhuǎn)頁面并傳值
Navigator.pushNamed(context, '/search', arguments: {"title" : "11111"});
//接收頁面接收傳遞參數(shù)
import 'package:flutter/material.dart';
class SearchPage extends StatelessWidget {
  final arguments;
  SearchPage({this.arguments});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(this.arguments != null ? this.arguments["title"] : "搜索111"),
      ),
      body: Container(
        child: Text("搜索頁面內(nèi)容區(qū)域"),
      ),
    );
  }
}
優(yōu)化

將onGenerateRoute抽離出一個(gè)單獨(dú)的路由配置文件鼎天,方便統(tǒng)一管理
1舀奶、新建routes.dart文件

import 'package:citylifeflutter/search.dart';
import 'package:flutter/material.dart';

final routes = {
  '/search': (context, {arguments})=>SearchPage(arguments: arguments)
};

dynamic onGenerateRoute = (RouteSettings settings){
  final String name = settings.name;
  final Function pageContentBuilder = routes[name];
  if (pageContentBuilder != null) {
    if (settings.arguments != null) {
      final Route route = MaterialPageRoute(
          builder: (context) => pageContentBuilder(context, arguments: settings.arguments)
      );
      return route;
    } else {
      final Route route = MaterialPageRoute(
          builder: (context) => pageContentBuilder(context)
      );
      return route;
    }
  } else {
    final Route route = MaterialPageRoute(
        builder: (context) => pageContentBuilder(context)
    );
    return route;
  }
};

2、修改main.dart文件斋射,引入routes


class MyApp extends StatelessWidget {
  final routes = {
    '/': (context)=>Tabs(),//tab欄切換
//不需要傳值
    '/shop': (context)=>ShopPage(),
//需要傳值
    '/search': (context, {arguments})=>SearchPage(arguments: arguments)
  };
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: Color(0xffFFFFFF),
      ),
//      home: Tabs(),
      initialRoute: '/',//配置根路由
      //命名路由的跳轉(zhuǎn)傳值
      onGenerateRoute: onGenerateRoute
    );
  }
}
替換路由
Navigator.of(context).pushReplacementNamed('/routeName');
返回根路由

1育勺、替換路由實(shí)現(xiàn)
2、系統(tǒng)方法(pushAndRemoveUntil)罗岖,將route置為null

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) {
  return Tabs(index:1);
 }), (route) {
  return route == null;
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涧至,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桑包,更是在濱河造成了極大的恐慌化借,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捡多,死亡現(xiàn)場離奇詭異蓖康,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)垒手,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蒜焊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人科贬,你說我怎么就攤上這事泳梆。” “怎么了榜掌?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵优妙,是天一觀的道長。 經(jīng)常有香客問我憎账,道長套硼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任胞皱,我火速辦了婚禮邪意,結(jié)果婚禮上九妈,老公的妹妹穿的比我還像新娘。我一直安慰自己雾鬼,他們只是感情好萌朱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著策菜,像睡著了一般晶疼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上又憨,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天冒晰,我揣著相機(jī)與錄音,去河邊找鬼竟块。 笑死壶运,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浪秘。 我是一名探鬼主播蒋情,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耸携!你這毒婦竟也來了棵癣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤夺衍,失蹤者是張志新(化名)和其女友劉穎狈谊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟沙,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡河劝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矛紫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赎瞎。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颊咬,靈堂內(nèi)的尸體忽然破棺而出务甥,到底是詐尸還是另有隱情,我是刑警寧澤喳篇,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布敞临,位于F島的核電站,受9級特大地震影響麸澜,放射性物質(zhì)發(fā)生泄漏挺尿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望票髓。 院中可真熱鬧,春花似錦铣耘、人聲如沸洽沟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裆操。三九已至,卻和暖如春炉媒,著一層夾襖步出監(jiān)牢的瞬間踪区,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工吊骤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缎岗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓白粉,卻偏偏與公主長得像传泊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子鸭巴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

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

  • 隨著純客戶端到Hybrid技術(shù)眷细,到RN&Weex,再到如今的Flutter技術(shù)鹃祖,客戶端實(shí)現(xiàn)技術(shù)不斷前進(jìn)溪椎。 在之前的...
    瑜小賢閱讀 590評論 0 0
  • flutter中的命名路由 命名路由是區(qū)別于基本路由的一種存在,方便于大型項(xiàng)目中路由的統(tǒng)一管理恬口,現(xiàn)在校读,在前面基本路...
    中v中閱讀 2,178評論 0 4
  • 【聲明:】本文是作者AWeiLoveAndroid原創(chuàng),版權(quán)歸作者 AWeiLoveAndroid 所有祖能,侵權(quán)必究...
    AWeiLoveAndroid閱讀 15,307評論 2 23
  • 路由其實(shí)就是控制頁面之間的跳轉(zhuǎn)地熄,Route在Android中通常指一個(gè)Activity,在iOS中指一個(gè)ViewC...
    破浪_閱讀 1,360評論 0 0
  • 列出每周計(jì)劃到了第三周芯杀,前兩周來看端考,沒有達(dá)到預(yù)期的效果,有時(shí)候還添加不良情緒揭厚,對于二建的視頻學(xué)習(xí)大體上還過得去却特,至...
    spring蟲蟲閱讀 196評論 0 0