Flutter微应用管理插件flutter_micro_app的使用
Flutter微应用管理插件flutter_micro_app的使用
Flutter Micro App 插件旨在简化组织并保持在Flutter应用程序中实现微应用架构的一致性,确保标准化和高效的开发过程。以下是关于如何使用此插件的详细介绍。
一、概述
-
版本与许可
-
功能
- 提供了Flutter DevTools扩展,允许您检查应用事件处理器、通过Flutter Widget Inspector检查Widget树中的路由、从外部控制应用分发事件、搜索路由以及将所有路由导出到Excel文件(.xlsx),并且支持特性标记存根。
- 支持存根远程配置,您可以轻松地在真实数据和模拟数据之间切换。
二、初始化与配置
1. 配置偏好设置(可选)
MicroAppPreferences.update(
MicroAppConfig(
nativeEventsEnabled: true, // 如果您想在原生(Android/iOS)之间分发和监听事件 [默认 = false]
nativeNavigationCommandEnabled: true,
nativeNavigationLogEnabled: true,
pathSeparator: MicroAppPathSeparator.slash // 自动使用斜杠"/"连接路由片段
pageTransitionType: MicroPageTransitionType.platform, // 动态过渡类型
onRouteNotRegistered: (route, {arguments, type, context}) {
print('[OnRouteNotRegistered] Route not found: $route, $arguments, $type');
},
)
);
2. 初始化微主机,注册所有微应用
void main() {
runApp(MyApp());
}
class MyApp extends MicroHostStatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: NavigatorInstance.navigatorKey,
onGenerateRoute: onGenerateRoute,
initialRoute: '/host_home_page',
navigatorObservers: [
NavigatorInstance
],
);
}
@override
List<MicroAppPage> get pages => [
MicroAppPage(
route: '/host_home_page',
pageBuilder: PageBuilder(
widgetBuilder: (_, __) => const HostHomePage()
),
description: 'The initial page of the application',
),
MicroAppPage(
route: '/modal_page',
pageBuilder: PageBuilder(
modalBuilder: (settings) => ModalExamplePage(title: '${settings.arguments}'),
),
description: 'ModalBuilder can be used to show [PopupRoute]',
)
];
@override
List<MicroApp> get initialMicroApps => [MicroApplication1(), MicroApplication2()];
}
三、事件处理
1. 分发事件
MicroAppEventController().emit(
const MicroAppEvent(
name: 'my_event',
channels: ['user_auth'])
);
MicroAppEventController().emit<String>(
const MicroAppEvent(
name: 'my_event',
payload: 'some string here')
);
MicroAppEventController().emit<MyCustomClass>(
const MicroAppEvent(
name: 'my_event',
payload: MyCustomClass(userName: 'Emanuel Braz'),
channels: ['user_auth', 'wellcome']
);
);
2. 监听事件
class MyMicroApplication extends MicroApp with HandlerRegisterMixin {
MyMicroApplication() {
registerEventHandler(
MicroAppEventHandler(
(event) => logger.d([ event.name, event.payload])
);
);
}
}
四、页面导航
1. 使用GoRouter(高级且灵活)
final FmaGoRouter fmaGoRouter = FmaGoRouter(
name: 'GoRouter Example',
description: 'This is an example of GoRouter',
goRouter: GoRouter(
navigatorKey: NavigatorInstance.navigatorKey,
routes: <RouteBase>[
FmaGoRoute(
description: 'This is the boot page',
path: '/',
parameters: BaseHomePage.new,
builder: (BuildContext context, GoRouterState state) {
return const BaseHomePage();
},
routes: <RouteBase>[
FmaGoRoute(
description: 'This page has path parameter',
parameters: ExamplePageA.new,
path: 'page_with_id/:id',
builder: (context, state) {
return ExamplePageA('page with id = ' + (state.pathParameters['id'] ?? ''));
},
),
],
),
],
),
);
2. 使用MicroApp默认(简单易用)
import 'package:micro_routes/exports.dart';
class Application1MicroApp extends MicroApp {
final routes = Application1Routes();
@override
List<MicroAppPage> get pages => [
MicroAppPage<Initial>(
description: 'The initial page of the micro app 1',
route: routes.baseRoute.route,
parameters: Initial.new,
pageBuilder: PageBuilder(
widgetBuilder: (context, settings) => const Initial(),
transitionType: MicroPageTransitionType.slideZoomUp
),
),
MicroAppPage<Page1>(
description: 'Display all buttons of the showcase',
route: routes.page1,
parameters: Page1.new,
pageBuilder: PageBuilder(
modalBuilder: (settings) => Page1(),
)
),
];
}
五、示例代码
以下是一个完整的main.dart
示例:
void main() {
// 所有示例都在Android模拟器上工作,目前没有iOS示例,但功能相同,
// 只需在原生iOS上实现它。如果需要,可以自己实现。(尽快会提供iOS示例)
// 初始化微应用主机
runApp(MyApp());
}
class MyApp extends MicroHostStatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: NavigatorInstance.navigatorKey,
onGenerateRoute: onGenerateRoute,
initialRoute: '/host_home_page',
navigatorObservers: [
NavigatorInstance
],
);
}
@override
List<MicroAppPage> get pages => [
MicroAppPage(
route: '/host_home_page',
pageBuilder: PageBuilder(
widgetBuilder: (_, __) => const HostHomePage()
),
description: 'The initial page of the application',
),
MicroAppPage(
route: '/modal_page',
pageBuilder: PageBuilder(
modalBuilder: (settings) => ModalExamplePage(title: '${settings.arguments}'),
),
description: 'ModalBuilder can be used to show [PopupRoute]',
)
];
@override
List<MicroApp> get initialMicroApps => [MicroApplication1(), MicroApplication2()];
}
以上是关于flutter_micro_app
插件的基本使用方法,希望对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter微应用管理插件flutter_micro_app的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter微应用管理插件flutter_micro_app的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_micro_app
插件的示例代码。flutter_micro_app
是一个用于 Flutter 微前端管理的插件,允许你在一个 Flutter 应用中嵌入和管理多个微应用。
首先,你需要在你的 pubspec.yaml
文件中添加 flutter_micro_app
依赖:
dependencies:
flutter:
sdk: flutter
flutter_micro_app: ^最新版本号 # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,让我们看看如何在你的 Flutter 应用中使用 flutter_micro_app
。
主应用 (Host App)
- 创建主应用入口
import 'package:flutter/material.dart';
import 'package:flutter_micro_app/flutter_micro_app.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Micro App Example'),
),
body: MicroAppHost(
child: Center(
child: Text('Loading Micro App...'),
),
onMicroAppCreated: (MicroAppContext context) {
// 当微应用创建完成时调用
print('Micro App Created');
},
onMicroAppLaunched: (MicroAppContext context, String url) {
// 当微应用启动完成时调用
print('Micro App Launched with URL: $url');
},
microAppRegistry: MicroAppRegistry()
..registerMicroApp(
name: 'example_micro_app',
entry: 'assets/example_micro_app/main.dartbundle', // 微应用的入口文件
container: Container(
color: Colors.white,
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 启动微应用
await MicroAppHost.of(context).launchMicroApp(name: 'example_micro_app', url: '/home');
},
tooltip: 'Launch Micro App',
child: Icon(Icons.add),
),
),
);
}
}
微应用 (Micro App)
你需要为你的微应用创建一个独立的 Flutter 模块。这里假设你已经创建了一个名为 example_micro_app
的模块。
- 在微应用中配置
MaterialApp
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: {
'/home': (context) => HomeScreen(),
// 添加更多路由
},
initialRoute: '/home',
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Example Micro App'),
),
body: Center(
child: Text('Hello from Micro App!'),
),
);
}
}
- 构建微应用资源
确保你的微应用已经正确构建并生成了 main.dartbundle
文件。你可以使用以下命令来构建你的 Flutter 模块:
flutter build bundle --target=lib/main.dart -o assets/example_micro_app/main.dartbundle
然后将生成的 main.dartbundle
文件放置在主应用的 assets
目录下。
运行主应用
完成上述步骤后,你可以运行你的主应用。点击浮动操作按钮(FAB),你应该能够看到你的微应用被加载并显示在屏幕上。
这个例子展示了如何在 Flutter 中使用 flutter_micro_app
插件来管理微应用。你可以根据实际需求进一步扩展和自定义你的微前端架构。