📜  Flutter中的路由和导航器

📅  最后修改于: 2022-05-13 01:56:53.601000             🧑  作者: Mango

Flutter中的路由和导航器

简介: Flutter是 Google 创建的开源移动应用 SDK。 Flutter使用Dart语言创建遵循面向对象概念的移动应用程序。 Flutter在移动应用程序开发人员中有着非常好的影响力,因为它具有跨平台开发、热重载、热重启、引人注目的 UI 等引人注目的特性。在flutter中,从文本到填充,一切都是小部件。 Flutter中的一切,都是一个小部件。

路线:应用程序是新趋势。如今,Play商店中可用的应用程序数量非常多。应用程序在称为页面或屏幕的全屏容器中显示其内容。在flutter中,页面或屏幕被称为Routes 。在 android 中,这些页面/屏幕被称为 Activity,而在 iOS 中,它被称为 ViewController。但是,在flutter中,路由被称为 Widget。在Flutter中,一个 Page/Screen 被称为 Route。

创建路由:可以使用面向对象的概念在Dart中以“类”的形式编写路由。每个路由都可以写成一个单独的类,有自己的内容和 UI。

现在让我们创建两条路线,每条路线都有独特的 App Bars 和 Raised Buttons。代码如下:

class HomeRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Geeks for Geeks'),
        backgroundColor: Colors.green,
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Click Me!'),
          onPressed: () {
            /* Contains the code that helps us
             navigate to the second route. */
          },
        ),
      ),
    );
  }
}
  
class SecondRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Click Me Page"),
        backgroundColor: Colors.green,
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            /* Contains the code that helps us
             navigate to first route. */
          },
          child: Text('Home!'),
        ),
      ),
    );
  }
}

Navigator:顾名思义,Navigator 是一个帮助我们在路线之间导航的小部件。导航器在处理路由时遵循堆栈方法。根据用户所做的操作,路线一个接一个地堆叠,当按下时,它会转到最近访问的路线。 Navigator 是一个遵循堆栈规则的小部件。

定义主页:在导航时,我们需要做的第一件事就是定义或初始化“主页”。主页可以根据我们的需要是任何路由。主页通常会放置在导航器堆栈的底部。现在让我们看看如何将 HomeRoute() 初始化为我们的主页:

void main() {
  runApp(MaterialApp(
    home: HomeRoute(),
  ));
}

导航到页面:既然我们已经定义了主页,剩下的就是从主页导航到应用程序的另一条路线。为此,导航器小部件有一个名为 Navigator.push() 的方法。此方法将路线推送到家的顶部,从而显示第二条路线。将路由压入堆栈的代码如下:

// Within the `HomeRoute` widget
onPressed: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondRoute()),
  );
}

导航回家:现在我们已经到了目的地,但是我们如何回家呢?为此,导航器有一个名为 Navigator.pop() 的方法。这有助于我们从堆栈中删除当前路由,以便我们回到我们的主路由。这可以按如下方式完成:

// Within the SecondRoute widget
onPressed: () {
  Navigator.pop(context);
}

示例:所以,这就是我们如何在应用程序的两个页面之间导航。上述flutter app的整个代码如下:

import 'package:flutter/material.dart';
  
void main() {
  runApp(MaterialApp(
    home: HomeRoute(),
  ));
}
  
class HomeRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Geeks for Geeks'),
        backgroundColor: Colors.green,
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Click Me!'),
          onPressed: () {
              Navigator.push(
              context,
              MaterialPageRoute(builder: 
                (context) => SecondRoute()),
              );
          }
        ),
      ),
    );
  }
}
  
class SecondRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Click Me Page"),
        backgroundColor: Colors.green,
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
              Navigator.pop(context);
          },
          child: Text('Home!'),
        ),
      ),
    );
  }
}

输出: