Flutter微前端架构插件microfrontends的使用

Flutter微前端架构插件microfrontends的使用

microfrontends

Flutter应用程序框架

codecov test

⚠️ 实验性!不要在生产应用中使用 ⚠️

该项目仍处于实验阶段。API尚未定型,可能会发生变化。

使用

查看示例/example/

许可证

MIT


示例代码

example/lib/main.dart

import 'package:example/examples.dart';
import 'package:flutter/material.dart';
import 'package:microfrontends/microfrontends.dart'; // 导入microfrontends包

import 'app_widget.dart';
import 'header.dart';

void main() {
  runApp(Examples()); // 启动Examples类
}

class Examples extends StateContainerWidget { // 继承StateContainerWidget
  const Examples({Key? key}) : super(key: key);

  [@override](/user/override)
  initState(StateChunkSetter state) { // 初始化状态
    state<AppWidget>(ExamplesGrid()); // 设置初始AppWidget为ExamplesGrid
  }

  [@override](/user/override)
  Widget build(BuildContext context) { // 构建UI
    return MaterialApp(
      home: Scaffold(
        body: QueryBuilder<AppWidget>(builder: (context, widget, _) { // 使用QueryBuilder来动态构建组件
          return Column(
            children: [
              Header(widget: widget), // 添加头部组件
              Container(height: 2, color: Theme.of(context).dividerColor), // 分割线
              Expanded(child: widget), // 扩展剩余空间以容纳当前widget
            ],
          );
        }),
      ),
    );
  }
}

class ExamplesGrid extends AppWidget { // 继承AppWidget
  final title = 'Examples';

  const ExamplesGrid({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) { // 构建UI
    return LayoutBuilder(builder: (context, constraints) { // 使用LayoutBuilder来根据布局约束构建UI
      final crossAxisCount = (constraints.biggest.width ~/ 220).clamp(1, 9999); // 计算列数
      return GridView.count( // 使用GridView来创建网格布局
        crossAxisCount: crossAxisCount,
        childAspectRatio: 5 / 3, // 宽高比
        crossAxisSpacing: 8, // 横向间距
        mainAxisSpacing: 8, // 纵向间距
        padding: const EdgeInsets.all(8.0), // 填充
        children: examples.map((e) => ExampleCard(child: e)).toList(), // 生成每个例子卡片
      );
    });
  }
}

class ExampleCard extends StatelessWidget { // 继承StatelessWidget
  final AppWidget child;

  const ExampleCard({Key? key, required this.child}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) { // 构建UI
    final br = BorderRadius.circular(12); // 圆角半径
    return Card(
      shape: RoundedRectangleBorder(borderRadius: br), // 设置形状
      elevation: 2, // 阴影高度
      child: InkWell( // 可点击区域
        borderRadius: br, // 设置圆角
        onTap: () { // 点击事件
          context.setState(child); // 更新状态
        },
        child: Padding(
          padding: const EdgeInsets.all(16.0), // 填充
          child: Text( // 文本
            child.title, // 显示标题
            style: Theme.of(context)
                .textTheme
                .headline5!
                .copyWith(fontWeight: FontWeight.bold), // 设置样式
          ),
        ),
      ),
    );
  }
}

更多关于Flutter微前端架构插件microfrontends的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter微前端架构插件microfrontends的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 微前端架构插件 microfrontends 是一种用于在 Flutter 应用中实现微前端架构的解决方案。微前端架构允许你将一个大型应用拆分为多个独立的、可独立开发和部署的小型应用(微应用),每个微应用可以独立运行并集成到主应用中。

1. 安装 microfrontends 插件

首先,你需要在 pubspec.yaml 文件中添加 microfrontends 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  microfrontends: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 创建微应用

每个微应用都是一个独立的 Flutter 项目。你可以在不同的项目中开发不同的微应用。每个微应用需要暴露一个入口点,以便主应用可以加载它。

例如,假设你有一个微应用 user_profile,你可以在 lib/main.dart 中定义入口点:

import 'package:flutter/material.dart';
import 'package:microfrontends/microfrontends.dart';

void main() {
  runApp(UserProfileApp());
}

class UserProfileApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('User Profile')),
        body: Center(child: Text('This is the User Profile Micro App')),
      ),
    );
  }
}

// 暴露微应用的入口点
Widget createUserProfileApp() {
  return UserProfileApp();
}

3. 在主应用中加载微应用

主应用需要使用 microfrontends 插件来加载和集成微应用。你可以通过 MicroAppLoader 来加载微应用。

首先,在主应用的 pubspec.yaml 中添加微应用的依赖:

dependencies:
  user_profile:
    path: ../user_profile  # 微应用的路径

然后在主应用中使用 MicroAppLoader 加载微应用:

import 'package:flutter/material.dart';
import 'package:microfrontends/microfrontends.dart';
import 'package:user_profile/user_profile.dart' as user_profile;

void main() {
  runApp(MainApp());
}

class MainApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Main App')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('This is the Main App'),
              ElevatedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => MicroAppLoader(
                        createApp: user_profile.createUserProfileApp,
                      ),
                    ),
                  );
                },
                child: Text('Load User Profile Micro App'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部