Fluro 最新版使用 Flutter路由

1,528 阅读1分钟

2022Fluro 最新版使用

fluro: ^2.0.3

文件结构 main.dart myApp.dart application.dart routes.dart

首先创建route/application.dart 文件

import 'package:fluro/fluro.dart';

class Application {
  static late final FluroRouter router;
}

创建route/routes.dart 文件

// fluro 路由配置
import 'package:flutter/material.dart';
import 'package:fluro/fluro.dart';
import 'package:good_guest/pages/home/index.dart';
import '../pages/login.dart';

// 对应处理函数(一般处理函数单独放一个文件)
var _homeHandler = Handler(
    handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
  return const HomePage();
});
var _loginHandler = Handler(
    handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
  return const LoginPage();
});

// 路由配置
class Routes {
  static String home = "/";
  static String login = "/login";
  static void configureRoutes(FluroRouter router) {
    router.notFoundHandler = Handler(
        handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
      print("ROUTE WAS NOT FOUND !!!");
      return;
    });
    router.define(home, handler: _homeHandler);
    router.define(login, handler: _loginHandler);
  }
}

myApp.dart 文件

import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
// 路由
import 'package:good_guest/route/routes.dart';
import 'package:good_guest/route/application.dart';

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    final router = FluroRouter();
    Application.router = router;    // 先写
    Routes.configureRoutes(router); // 后写
  }

  @override
  Widget build(BuildContext context) {
    final app = MaterialApp(
      title: 'Fluro',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      onGenerateRoute: Application.router.generator, //全局注册
    );
//    print("initial route = ${app.initialRoute}");
    return app;
  }
}

使用

import 'package:flutter/material.dart';
import 'package:good_guest/route/routes.dart';

class PageContent extends StatelessWidget {
  final String name;

  const PageContent({Key? key, required this.name, required this.RouterName})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('当前页面是$name'),
      ),
      body: ListView(
        children: <Widget>[
          Container(
            width: 40.0,
            height: 20.0,
            child: ElevatedButton(
              child: Text("按钮"),
              onPressed: () {
                print("点击按钮");
                Navigator.pushNamed(context, Routes.login);
              },
            ),
          ),
        ],
      ),
    );
  }
}

补充

最新版地址github.com/lukepighett…

       Package: https://pub.dev/packages/fluro