日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Flutter使用push?pop方法及路由進行導航詳解_IOS

作者:Jimmy ? 更新時間: 2022-11-18 編程語言

正文

Web/Mobile 應用程序中,導航是一個很重要的特性,因為它允許你從一個頁面跳轉到另一個頁面。

flutter 應用程序中,我們可以使用 push(), pop() 方法實現導航,或者編寫我們自己的路由。

準備工作

我們假設 FirstScreenSecondScreen 是兩個不同的類,分別在各自的 FirstScreen.dartSecondScreen.dart 文件內。

FirstScreen.dart 文件如下:

import 'package:flutter/material.dart';
import 'package:navigation/SecondScreen.dart';
class FirstScreen extends StatefulWidget {
  @override
  _FirstScreenState createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
      title: Text("First Screen"),
    ),
    body: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(
          "Hello to First Screen",
          style: TextStyle(
            fontSize: 20,
          ),
        ),
        SizedBox(
          height: 10,
        ),
        Center(
          child: RaisedButton(
            onPressed: () {},
            child: Text(
              "First Screen",
              style: TextStyle(
                fontSize: 20,
                fontWeight: FontWeight.bold
              ),
            ),
          ),
        ),
      ],
    ),
   );
  }
}

SecondScreen.dart 文件如下:

import 'package:flutter/material.dart';
class SecondScreen extends StatefulWidget {
  @override
  _SecondScreenState createState() => _SecondScreenState();
}
class _SecondScreenState extends State<SecondScreen> {
  @override
  Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("Second Screen"),
    ),
    body: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(
          "Welcome on Second Screen",
          style: TextStyle(
            fontSize: 20,
          ),
        ),
        SizedBox(
          height: 10,
        ),
        Center(
          child: RaisedButton(
            onPressed: () {},
            child: Text(
              "Second Screen",
              style: TextStyle(
                fontSize: 20,
                fontWeight: FontWeight.bold
              ),
            ),
          ),
        ),
      ],
    ),
  );
 }
}

main.dart 的內容如下:

import 'package:flutter/material.dart';
import 'package:navigation/FirstScreen.dart';
void main() {
  runApp(MaterialApp(
      home: FirstScreen()));
}

第一種導航方式

我們可以使用 Navigator.push() 方法和 Navigator.pop() 方法進行頁面/屏幕導航。

為了觸發 RaisedButton 事件后從 FirstScreen 導航到 SecondScreen。我們需要在 FirstScreenbuild() 方法里面的 RaisedButtononPressed(){} 添加如下的事件:

onPressed: () {
  Navigator.push(context, MaterialPageRoute(builder: (context) => SecondScreen()));
},

Navigator.push() 方法將給定的路由推送到路由棧中,這個路由是由 Navigator 類來維護。

現在,我們可以使用 MaterialPageRoute路由 或者我們可以創建自己的路由。

將一個新的路由添加到棧中,我們可以通過一個 builder 函數創建一個 MaterialPageRoute 的實例。builder 函數可以創建我們想在頁面中展示的掛件。

(context) => SecondScreen() 指向 SecondSreen 上下文。

為了通過 RaisedButton 點擊事件,從 SecondScreen 返回到 FirstScreen 頁面:我們需要在 SecondScreen 頁面中添加如下的內容:

onPressed: () {
  Navigator.pop(context);
}

這里的 pop() 方法是將導航棧中最新的路由彈出。

第二種導航方式

通過 MaterialApp 構造函數額外提供的屬性:initialRouteroutes

import 'package:flutter/material.dart'
import 'package:navigation/FirstScreen.dart'
import 'package:navigation/SecondScreen.dart'
void main() {
  runApp(MaterialApp(
    initialRoute: '/firstScreen',
    routes: {
      '/firstScreen': (context) => FirstScreen(),
      '/secondScreen': (context) => SecondScreen(),
    },
    home: FirstScreen(),
  ));
}

initialRoute 屬性定義應用應該從哪個路由開始。routes 屬性定義有哪些路由是可以獲取的,且路由導航到哪些掛件。

這里,當路由導航到 /firstScreen 時,FirstScreen 掛件將構建。

現在,我們將 FirstScreenonPressed(){} 的方法更改如下:

onPressed: () {
  Navigator.pushNamed(context, '/secondScreen');
}

這里使用命名路由 Navigator.pushNamed() 導航到第一個頁面。

SecondScreenonPressed(){} 事件中,還是保留使用 Navigator.pop() 方法:

onPressed: () {
 Navigator.pop(context);
}

原文鏈接:https://juejin.cn/post/7148583217912610824

欄目分類
最近更新