Flutter单页路由管理插件singel_page_route的使用
Flutter单页路由管理插件singel_page_route的使用
single_page_route
是一个用于管理所有小部件的单页路由插件。例如,如果你在每个页面都需要调用 AppBar
,使用 single_page_route
,你可以在主页面 MasterPage
中仅调用一次 AppBar
。另一个优点是你不需要重定向页面,即使这些页面之间存在一些相似性。
开始使用
首先,你需要将 single_page_route
添加到你的项目中:
flutter pub add single_page_route
示例代码
以下是一个完整的示例代码,展示了如何使用 single_page_route
插件。
主文件 (main.dart
)
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:single_page_route/single_page_route.dart';
const HOME = "HOME";
const SEARCH = "SEARCH";
var routes = {
HOME: const Home(),
SEARCH: const Search()
};
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: MasterRoom(),
);
}
}
class MasterRoom extends StatefulWidget {
const MasterRoom({Key? key}) : super(key: key);
[@override](/user/override)
_MasterRoomState createState() => _MasterRoomState();
}
class _MasterRoomState extends State<MasterRoom> {
late Widget view;
late StreamSubscription _subscription;
[@override](/user/override)
void initState() {
super.initState();
SinglePageRoute.initSinglePageRoute(HOME, routes);
if (!SinglePageRoute.histories.isNotEmpty) {
SinglePageRoute.pushNamedWithoutTrigger(HOME);
view = SinglePageRoute.current;
} else {
SinglePageRoute.pushNamedWithoutTrigger(SinglePageRoute.currentName);
view = SinglePageRoute.current;
}
_subscription = SinglePageRoute.listen((data) {
setState(() {
view = data;
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: const Text("EXAMPLE SINGLE ROUTE"),
leading: SinglePageRoute.histories.length > 1 ? IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () {
SinglePageRoute.previous();
},
) : null,
),
body: view,
)
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
[@override](/user/override)
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
child: Center(
child: FlatButton(
color: Colors.blue,
child: const Text(
"Go To Search",
style: TextStyle(
color: Colors.white
),
),
onPressed: () {
SinglePageRoute.pushAndReplaceName(SEARCH);
},
),
),
);
}
}
class Search extends StatefulWidget {
const Search({Key? key}) : super(key: key);
[@override](/user/override)
_SearchState createState() => _SearchState();
}
class _SearchState extends State<Search> {
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
child: Center(
child: MaterialButton(
color: Colors.blue,
child: const Text(
"Back to home",
style: TextStyle(
color: Colors.white
),
),
onPressed: () {
SinglePageRoute.pushName(HOME);
},
),
)
);
}
}
更多关于Flutter单页路由管理插件singel_page_route的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter单页路由管理插件singel_page_route的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
single_page_route
是一个用于 Flutter 的单页路由管理插件,它可以帮助你更轻松地管理单页应用中的路由。使用这个插件,你可以避免在应用中引入复杂的多页路由管理,从而简化代码结构。
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 single_page_route
插件的依赖:
dependencies:
flutter:
sdk: flutter
single_page_route: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 基本使用
2.1 创建路由管理器
在你的应用中,首先需要创建一个路由管理器来管理单页路由:
import 'package:flutter/material.dart';
import 'package:single_page_route/single_page_route.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final RouteManager routeManager = RouteManager();
MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SinglePageRoute(
routeManager: routeManager,
initialPage: HomePage(),
),
);
}
}
2.2 定义页面
你可以定义多个页面,每个页面都是一个 Widget
:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Page'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 导航到另一个页面
SinglePageRoute.of(context)?.push(SecondPage());
},
child: Text('Go to Second Page'),
),
),
);
}
}
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Page'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 返回到上一个页面
SinglePageRoute.of(context)?.pop();
},
child: Text('Go Back'),
),
),
);
}
}
2.3 导航操作
你可以使用 SinglePageRoute.of(context)
来获取当前的路由管理器,并进行页面导航:
// 导航到新页面
SinglePageRoute.of(context)?.push(SecondPage());
// 返回到上一个页面
SinglePageRoute.of(context)?.pop();
3. 高级功能
3.1 页面切换动画
你可以自定义页面切换动画,通过 SinglePageRoute
的 transitionsBuilder
参数:
SinglePageRoute(
routeManager: routeManager,
initialPage: HomePage(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(1.0, 0.0),
end: Offset.zero,
).animate(animation),
child: child,
);
},
);
3.2 页面生命周期
你可以通过 RouteManager
监听页面的生命周期事件,例如页面进入和退出:
routeManager.addListener((event) {
if (event is RoutePushedEvent) {
print('Page pushed: ${event.page}');
} else if (event is RoutePoppedEvent) {
print('Page popped: ${event.page}');
}
});