Flutter导航管理插件sailor_plus的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter导航管理插件sailor_plus的使用

该插件允许你在不使用上下文的情况下通过屏幕和命名路由在Flutter中进行导航。

License: GNU

pub_package

开始使用

首先,在你的 pubspec.yaml 文件中添加 sailor_plus 作为依赖项。

dependencies:
  flutter:
    sdk: flutter
  sailor_plus: 1.0.0

接下来,在你的 Dart 文件中导入 sailor_plus.dart

import 'package:sailor_plus/sailor_plus.dart';

最后,确保在你的 main.dart 文件中设置 navigatorKey

MaterialApp(
  navigatorKey: Sailor.navigatorKey,
)

屏幕导航

要导航到另一个屏幕或页面,可以使用以下方法:

Sailor.to(AnotherPage());

命名路由导航

要使用命名路由进行导航,可以使用以下方法:

Sailor.toNamed("new_route");

返回上一页

要返回到上一个页面或路由,可以使用以下方法:

Sailor.back();

完整示例Demo

以下是完整的示例代码,展示了如何使用 sailor_plus 插件进行导航。

import 'package:flutter/material.dart';
import 'package:sailor_plus/sailor_plus.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Sailor Plus Demo",
      navigatorKey: Sailor.navigatorKey, // 添加Sailor导航键
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        centerTitle: true,
        title: const Text("Sailor plus example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text("Home screen"),
            const SizedBox(height: 16.0),
            ElevatedButton(
              child: const Text("Go to Screen 2"),
              onPressed: () => Sailor.to(const Screen2()), // 导航到Screen2
            ),
          ],
        ),
      ),
    );
  }
}

class Screen2 extends StatelessWidget {
  const Screen2({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        centerTitle: true,
        title: const Text("Another Screen"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text("Screen 2"),
            const SizedBox(height: 16.0),
            ElevatedButton(
              child: const Text("Go back"), // 返回上一页
              onPressed: () => Sailor.back(),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter导航管理插件sailor_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter导航管理插件sailor_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 sailor_plus 插件进行Flutter导航管理的代码示例。sailor_plus 是一个用于管理Flutter应用中路由的插件,它提供了声明式路由配置和强大的导航功能。

首先,确保你已经在 pubspec.yaml 文件中添加了 sailor_plus 依赖:

dependencies:
  flutter:
    sdk: flutter
  sailor_plus: ^最新版本号 # 请替换为最新版本号

然后运行 flutter pub get 以安装依赖。

接下来,让我们设置一个基本的 sailor_plus 配置并进行导航。

1. 配置路由

创建一个 routes.dart 文件来配置你的路由:

import 'package:flutter/material.dart';
import 'package:sailor_plus/sailor_plus.dart';
import 'screens/home_screen.dart'; // 假设你有一个 HomeScreen 小部件
import 'screens/details_screen.dart'; // 假设你有一个 DetailsScreen 小部件

class MyRouter extends SailorRouter {
  @override
  List<SailorRoute> get routes => [
    SailorRoute(
      path: '/',
      builder: (_, __) => HomeScreen(),
    ),
    SailorRoute(
      path: '/details/:id',
      builder: (_, params) => DetailsScreen(id: params['id']!),
    ),
  ];
}

2. 初始化 Sailor

在你的 main.dart 文件中,初始化 Sailor 并设置根路由:

import 'package:flutter/material.dart';
import 'package:sailor_plus/sailor_plus.dart';
import 'routes.dart';

void main() {
  // 初始化 Sailor
  Sailor.init(
    router: MyRouter(),
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerDelegate: Sailor.delegate,
      routeInformationParser: Sailor.routeInformationParser,
    );
  }
}

3. 导航到不同页面

在你的 HomeScreen 中,你可以使用 Sailor.navigate 方法来导航到不同的页面。例如:

// screens/home_screen.dart
import 'package:flutter/material.dart';
import 'package:sailor_plus/sailor_plus.dart';

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 导航到详情页面,传递一个 id 参数
            Sailor.navigate('/details/123');
          },
          child: Text('Go to Details'),
        ),
      ),
    );
  }
}

4. 接收参数并显示

DetailsScreen 中,你可以接收传递的参数并显示:

// screens/details_screen.dart
import 'package:flutter/material.dart';

class DetailsScreen extends StatelessWidget {
  final String id;

  DetailsScreen({required this.id});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Details Screen'),
      ),
      body: Center(
        child: Text('Details for ID: $id'),
      ),
    );
  }
}

总结

通过上述步骤,你已经成功地配置了 sailor_plus 插件,并实现了基本的导航功能。你可以根据需要进一步扩展和自定义路由配置,例如添加守卫、嵌套路由等。希望这个示例对你有所帮助!

回到顶部