Flutter应用导航管理插件flutter_app_navigator的使用
Flutter应用导航管理插件flutter_app_navigator的使用
flutter_app_navigator
是一个用于管理应用导航、路由和屏幕切换的库。
使用示例
以下是 flutter_app_navigator
的基本使用示例。该示例展示了如何创建一个简单的应用,并使用该库进行页面之间的导航。
import 'package:flutter/material.dart';
import 'package:flutter_app_navigator/app_navigator.dart';
void main() => runApp(const Application());
class Application extends StatelessWidget {
const Application({
super.key,
});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: '自定义页面过渡应用',
initialRoute: "page_1",
onGenerateRoute: AppRouter.I.generate,
);
}
}
class AppRouter extends AppRouteGenerator {
const AppRouter._();
static AppRouter get I => const AppRouter._();
/// 可选配置
[@override](/user/override)
AppRouteConfig get config {
return const AppRouteConfig(
animationTime: 300,
animationType: AnimationType.slideRight,
);
}
[@override](/user/override)
Map<String, RouteBuilder> routes() {
return {
"page_1": page1,
"page_2": page2,
};
}
[@override](/user/override)
Widget onDefault(BuildContext context, Object? data) => page2(context, data);
Widget page1(BuildContext context, Object? data) {
return const Page1();
}
Widget page2(BuildContext context, Object? data) {
return Page2(
data: data?.get("data"),
);
}
}
class Page1 extends StatefulWidget {
const Page1({
super.key,
});
[@override](/user/override)
State<Page1> createState() => _Page1State();
}
class _Page1State extends State<Page1> {
Object? result;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('首页'),
),
backgroundColor: Colors.white,
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"数据 : $result",
style: const TextStyle(fontSize: 24),
),
const SizedBox(height: 24),
ElevatedButton(
onPressed: () async {
result = await AppNavigator.load(
context,
"page_2",
// arguments: {
// "data": "Hi, I'm from Home...!",
// },
animationType: AnimationType.zoom,
);
setState(() {});
},
child: const Text('前往第二个页面'),
),
],
),
),
);
}
}
class Page2 extends StatelessWidget {
final Object? data;
const Page2({
super.key,
required this.data,
});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('第二个页面'),
),
backgroundColor: Colors.blue,
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"$data",
style: const TextStyle(fontSize: 24),
),
const SizedBox(height: 24),
ElevatedButton(
onPressed: () {
AppNavigator.terminate(
context,
result: "Hey, I'm back...!",
);
},
child: const Text('返回'),
),
],
),
),
);
}
}
更多关于Flutter应用导航管理插件flutter_app_navigator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用导航管理插件flutter_app_navigator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_app_navigator
是一个用于简化 Flutter 应用导航管理的插件。它提供了一种简洁的方式来处理页面之间的导航、参数传递以及路由管理。以下是如何使用 flutter_app_navigator
插件的详细步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 flutter_app_navigator
依赖:
dependencies:
flutter:
sdk: flutter
flutter_app_navigator: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化导航器
在你的应用中,初始化 flutter_app_navigator
。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:flutter_app_navigator/flutter_app_navigator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter App Navigator Example',
navigatorKey: AppNavigator.navigatorKey, // 使用 AppNavigator 的 navigatorKey
onGenerateRoute: AppNavigator.onGenerateRoute, // 使用 AppNavigator 的 onGenerateRoute
home: HomeScreen(),
);
}
}
3. 定义路由
在 AppNavigator
中定义你的应用路由。你可以创建一个单独的文件来管理路由,例如 routes.dart
:
import 'package:flutter_app_navigator/flutter_app_navigator.dart';
import 'package:flutter/material.dart';
import 'home_screen.dart';
import 'detail_screen.dart';
class Routes {
static const String home = '/';
static const String detail = '/detail';
static final Map<String, WidgetBuilder> routes = {
home: (context) => HomeScreen(),
detail: (context) => DetailScreen(),
};
}
class AppNavigator extends BaseNavigator {
static final navigatorKey = GlobalKey<NavigatorState>();
static Route<dynamic> onGenerateRoute(RouteSettings settings) {
final builder = Routes.routes[settings.name];
if (builder != null) {
return MaterialPageRoute(
builder: builder,
settings: settings,
);
}
throw Exception('Unknown route: ${settings.name}');
}
}
4. 页面导航
在你的页面中,使用 AppNavigator
来进行导航。例如,在 HomeScreen
中导航到 DetailScreen
:
import 'package:flutter/material.dart';
import 'package:flutter_app_navigator/flutter_app_navigator.dart';
import 'routes.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Screen'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
AppNavigator.pushNamed(Routes.detail);
},
child: Text('Go to Detail Screen'),
),
),
);
}
}
5. 传递参数
如果你需要在页面之间传递参数,可以在 pushNamed
方法中传递参数:
AppNavigator.pushNamed(Routes.detail, arguments: {'id': 123});
在目标页面(例如 DetailScreen
)中,可以通过 ModalRoute.of(context)
获取参数:
class DetailScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final Map<String, dynamic> args = ModalRoute.of(context).settings.arguments;
return Scaffold(
appBar: AppBar(
title: Text('Detail Screen'),
),
body: Center(
child: Text('ID: ${args['id']}'),
),
);
}
}
6. 返回上一页
使用 AppNavigator.pop()
返回到上一页:
AppNavigator.pop();