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);
},
),
),
],
),
);
}
}
补充
Package: https://pub.dev/packages/fluro