91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Flutter中使用導航Navigator

發布時間:2023-02-24 16:28:48 來源:億速云 閱讀:111 作者:iii 欄目:開發技術

本篇內容主要講解“怎么在Flutter中使用導航Navigator”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么在Flutter中使用導航Navigator”吧!

簡介

一個APP如果沒有頁面跳轉那么是沒有靈魂的,頁面跳轉的一個常用說法就是Navigator,flutter作為一個最為優秀的前端框架,Navigator肯定是必不可少的,那么在flutter中如何使用Navigator呢?

一起來看看吧。

flutter中的Navigator

Navigator是flutter中用來導航的關鍵組件。我們先來看下Navigator的定義:

class Navigator extends StatefulWidget

Navigator首先是一個StatefulWidget,為什么是一個有狀態的widget呢?這是因為Navigator需要在內部報錯一些路由的信息,事實上Navigator中保存的就是一個棧結構的歷史訪問過的widget。

我們來看下它的構造函數,然后理解一下它內部的各個屬性的含義:

  const Navigator({
    Key? key,
    this.pages = const <Page<dynamic>>[],
    this.onPopPage,
    this.initialRoute,
    this.onGenerateInitialRoutes = Navigator.defaultGenerateInitialRoutes,
    this.onGenerateRoute,
    this.onUnknownRoute,
    this.transitionDelegate = const DefaultTransitionDelegate<dynamic>(),
    this.reportsRouteUpdateToEngine = false,
    this.observers = const <NavigatorObserver>[],
    this.restorationScopeId,
  })

在這些屬性中onGenerateRoute,pages,onGenerateInitialRoutes,transitionDelegate和observers這幾個參數必須是非null。

首先是pages,pages是一個List對象:

  final List<Page<dynamic>> pages;

這里的pages存儲的就是歷史訪問信息,Navigator的所有操作都是圍繞著pages來的。

如果我們想在page切換的過程中添加一些動畫,那么就可以用到transitionDelegate,如果我們要彈出一些page的話,那么可能會希望用到onPopPage callback方法來對pages list進行一些特殊處理。

另外initialRoute是需要第一個展示的route,Navigator還提供了兩個方法用來在生成Route的時候進行觸發:onGenerateRoute,onGenerateInitialRoutes。

Navigator提供了一系列的pop和push方法用來對路由進行跳轉。

下面我們將會通過一個具體的例子來對Navigator進行詳細的講解。

Navigator的使用

在這個例子中我們會使用Navigator的兩個最基本的方法push和pop來進行路由的切換。

先來看下push方法的定義:

  static Future<T?> push<T extends Object?>(BuildContext context, Route<T> route) {
    return Navigator.of(context).push(route);
  }

push是一個靜態方法,這意味著我們可以通過使用Navigator.push來進行調用。

push方法需要傳入兩個參數,分別是context和route。

為什么會有context呢?這是因為Navigator是和context相關聯的,不同的context可以有不同的Navigator。

Route就是要導入的路由。

可以看到方法內部實際上是調用了Navigator.of方法,最后返回的是一個Future對象。

我們的例子是兩個圖片widget的簡單切換。點擊一個圖像widget會調整到另外一個圖像widget上,在另外一個圖像widget上點擊,會跳轉回前一個widget。

我們可以這樣定義第一個widget:

class FirstPage extends StatelessWidget {
  const FirstPage({Key? key}) : super(key: key);

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('First Page'),
      ),
      body: GestureDetector(
        onTap: () {
          Navigator.push(context, MaterialPageRoute(builder: (context) {
            return const SecondPage();
          }));
        },
        child: Image.network(
          'http://www.flydean.com/wp-content/uploads/2019/06/cropped-head5.jpg',
        ),
      ),
    );
  }

這里的body我們放置了一個Image對象,然后在它的點擊onTap操作時,調用了Navigator.push方法。

因為push方法需要一個Route對象,這里我們使用了最簡單的MaterialPageRoute,然后返回第二個圖像widget對象。

再來看看第二個圖像Widget的定義:

class SecondPage extends StatelessWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GestureDetector(
        onTap: () {
          Navigator.pop(context);
        },
        child: Center(
          child: Image.network(
            'https://img-blog.csdnimg.cn/bb5b19255ab6406cb6bdc467ecc40462.webp',
          ),
        ),
      ),
    );
  }
}

和第一個圖像widget一樣,它的body也是一個image,然后在點擊ontap方法中跳回到第一個圖片widget去。

這里的跳回方法使用的是 Navigator.pop,我們來看下pop方法的實現:

  static void pop<T extends Object?>(BuildContext context, [ T? result ]) {
    Navigator.of(context).pop<T>(result);
  }

和push一樣,pop方法也接收一個context對象,但是它還有一個可選的result參數。最后實際調用的是Navigator.of(context).pop方法。

result是做什么的呢?

還記得push方法嗎?push方法會返回一個Future,也就是說push方法是有結果的,這個結果是從哪里來的呢?這個結果就是pop時候傳進來的。

當我們調用push方法的時候,就會把這個result放在Future中返回。

到此,相信大家對“怎么在Flutter中使用導航Navigator”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏邑县| 营山县| 江川县| 抚顺县| 莱芜市| 高密市| 永善县| 巴东县| 锡林浩特市| 农安县| 云阳县| 平潭县| 禄劝| 武定县| 闵行区| 长武县| 东乡县| 泽库县| 响水县| 仁化县| 武安市| 柳林县| 镇平县| 长沙县| 龙里县| 左贡县| 澄城县| 巴东县| 兰考县| 桐庐县| 育儿| 察雅县| 武城县| 通河县| 巴马| 隆化县| 宝兴县| 德化县| 从江县| 上蔡县| 蒲城县|