Flutter路由注解管理插件ff_annotation_route_library的使用

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

好的,下面是一个完整的示例代码,展示了如何使用 ff_annotation_route_library 插件来管理 Flutter 路由。这个示例包括添加依赖、创建路由注解以及生成路由文件的过程。

示例代码

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ff_annotation_route demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: Routes.fluttercandiesMainpage,
      onGenerateRoute: (RouteSettings settings) {
        FFRouteSettings ffRouteSettings = getRouteSettings(
          name: settings.name!,
          arguments: settings.arguments as Map<String, dynamic>?,
          notFoundPageBuilder: () => Scaffold(
            appBar: AppBar(),
            body: const Center(
              child: Text('not find page'),
            ),
          ),
        );
        Bindingsings? binding;
        if (ffRouteSettings.codes != null {
          binding = ffRouteSettings.codes!['binding'] as Bindingsings?;
        }

        Transition transition;
        bool opaque = true;
        if (ffRouteSettings.pageRouteType != null) {
          switch (ffRouteSettings.pageRouteType) {
            case PageRouteType.cupertino:
              transition = Transition.cupertino;
              break;
            case PageRouteType.material:
              transition = Transition.downToUp;
              break;
            case PageRouteType.transparent:
              opaque = false;
              break;
            default:
          }
        }

        return GetPageRoute(
          binding: binding,
          opaque: opaque,
          settings: ffRouteSettings,
          transition: transition,
          page: () => ffRouteSettings.builder(),
        );
      },
    );
  }
}

解释

1 example/main.dart 文件中包含了完整的示例代码:

1 dependencies: 添加了 ff_annotation_route_library 的到项目的 pubspec.yaml 文件中。

  • pubspec.yaml 中添加 ff_annotation_route_librarydependencies 部分。
  • 使用 flutter packages get 下载插件。
dependencies:
  # add for a package
  ff_annotation_route_core: any
  # add only for a project
  ff_annotation_route_library: any

2 添加注解:在 main.dart 文件中定义了一个页面类,并使用 [@FFRoute](/user/FFRoute) 注解进行配置。

  • 定义页面类 MainPage 并使用 [@FFRoute](/user/FFRoute) 注解配置路由信息。
  • 设置路由名称、描述等属性。
[@FFRoute](/user/FFRoute)(
  name: "fluttercandies://mainpage",
  routeName: "MainPage",
)
class MainPage extends StatelessWidget {
  // ...
}

3 生成路由文件:通过执行命令来生成路由文件。

  • 打开终端,进入项目的根目录。
  • 运行 ff_route generate 命令来生成路由文件。
ff_route generate

4 使用导航:在 main.dart 文件中使用 Navigator.pushNamed 方法来跳转页面。

  • 使用 Navigator.pushNamed 方法跳转到指定的页面。
Navigator.pushNamed(context, Routes.fluttercandiesMainpage);

5 处理参数:如果需要传递参数给目标页面,可以使用 arguments 参数。

  • pushNamed 方法中传递参数。
Navigator.pushNamed(
  context,
  Routes.flutterCandiesTestPageE,
  arguments: <String, dynamic>{
    constructorName: 'required',
    'testMode': const TestMode(
      id: 100,
      isTest: true,
    ),
  },
);

6 使用 Getx:如果项目使用了 Getx 框架,可以在 GetPageRoute 中设置参数。

  • GetPageRoute 中传递参数。
GetPageRoute(
  binding: binding,
  opaque: opaque,
  settings: ffRouteSettings,
  transition: transition,
  page: () => ffRouteSettings.builder(),
);

7 拦截器:可以通过 RouteInterceptor 来拦截特定页面的路由。

  • 实现 RouteInterceptor 类并添加到页面的注解中。
[@FFRoute](/user/FFRoute)(
  name: 'fluttercandies://PageA',
  routeName: 'PageA',
  description: 'PageA',
  interceptors: <RouteInterceptor>[
    LoginInterceptor(),
  ],
)
class PageA extends StatefulWidget {
  const PageA({Key? key}) : super(key: key);

  @override
  State<PageA> createState() => _PageAState();
}

8 生命周期:继承 RouteLifecycleState 来检测页面的各种状态。

  • 在页面类中继承 RouteLifecycleState 并重写相关方法。
class _PageBState extends RouteLifecycleState<PageB> {
  @override
  void onPageShow() {
    print('PageB onPageShow');
  }

  @override
  void onPageHide() {
    print('PageB onPageHide');
  }

  // 其他生命周期方法...
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用ff_annotation_route_library插件进行路由注解管理的示例代码。这个插件允许你通过注解的方式来定义路由,从而简化路由管理。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加ff_annotation_route_library依赖:

dependencies:
  flutter:
    sdk: flutter
  ff_annotation_route_library: ^最新版本号

确保你替换了最新版本号为当前最新的插件版本号。

2. 创建路由配置类

接下来,你需要创建一个路由配置类,并使用注解来定义路由。假设你有一个简单的Flutter应用,包含两个页面:HomePageSecondPage

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

// 定义HomePage路由
@FFRoute(
  name: 'homepage',
  routePage: HomePage,
)
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Home Page')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 导航到SecondPage
            FFNavigator.pushNamed(context, 'secondpage');
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

// 定义SecondPage路由
@FFRoute(
  name: 'secondpage',
  routePage: SecondPage,
)
class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Second Page')),
      body: Center(
        child: Text('This is the Second Page'),
      ),
    );
  }
}

3. 初始化路由

在你的应用入口文件(通常是main.dart)中,初始化路由。你需要使用FFRouteLibrary来生成路由表,并将其传递给MaterialApponGenerateRoute参数。

import 'package:flutter/material.dart';
import 'package:ff_annotation_route_library/ff_annotation_route_library.dart';
import 'your_route_files.dart'; // 假设你的路由文件都在这个文件里

void main() {
  // 生成路由表
  final routeData = FFRouteLibrary()
    ..addRoutes(<String, Object>{
      // 这里可以手动添加额外的路由配置,如果有的话
    });

  runApp(MyApp(routeData: routeData));
}

class MyApp extends StatelessWidget {
  final FFRouteData routeData;

  MyApp({required this.routeData});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      // 使用生成的路由表
      onGenerateRoute: (RouteSettings settings) {
        final result = routeData.generator(settings.name, settings.arguments);
        if (result != null) {
          return result;
        } else {
          return MaterialPageRoute<void>(
            settings: settings,
            builder: (_) => Scaffold(
              appBar: AppBar(title: Text('Not Found')),
              body: Center(
                child: Text('No route defined for ${settings.name}'),
              ),
            ),
          );
        }
      },
      // 设置初始路由
      initialRoute: 'homepage',
    );
  }
}

4. 运行应用

现在,你可以运行你的Flutter应用。当你启动应用时,它应该会显示HomePage,点击按钮会导航到SecondPage

这个示例展示了如何使用ff_annotation_route_library插件通过注解来管理Flutter应用的路由。这种方法可以帮助你更好地组织代码,并减少手动管理路由的繁琐工作。

回到顶部