Flutter模块生成插件flutter_modules_generator的使用
Flutter模块生成插件flutter_modules_generator的使用
flutter_modules_generator
是一个强大的命令行工具,旨在为Flutter项目自动化生成模块结构。该工具创建有组织的文件夹层次结构和模板文件,包括控制器、绑定、业务逻辑、数据模型、服务、视图和测试模板。通过遵循SOLID原则并促进测试驱动开发(TDD),它简化了项目的设置,并强制执行一致且可扩展的代码结构。
关键特性
- 自动生成模块化和测试就绪的文件夹结构。
- 确保代码遵循SOLID原则,以保持代码可维护性。
- 支持测试驱动开发(TDD)并提供可选的测试模板。
- 支持流行的包如GetX和Dio。
- 支持QuickType用于从JSON生成模型。
安装
dart pub global activate flutter_modules_generator
使用
基本命令
dart pub global run flutter_modules_generator <module_name> <usecases> <services>
例如:
dart pub global run flutter_modules_generator user "create,read,update,delete" "auth,logger"
生成带测试模板的代码
要包含测试文件,在生成时使用--include-tests
标志:
dart pub global run flutter_modules_generator <module_name> <usecases> <services> --include-tests
例如:
dart pub global run flutter_modules_generator user "create,read,update,delete" "auth,logger" --include-tests
自动生成GetX路由和页面
当使用--include-route
标志时,CLI会自动注册页面和路由:
dart pub global run flutter_modules_generator user "create,read,update,delete" "auth,logger" --include-route
从JSON生成模型
确保安装了quicktype
来自动化从JSON文件生成模型:
npm install -g quicktype
当使用--include-model
标志时,应在模块的位置有一个JSON文件:your_module/data/json/
。
dart pub global run flutter_modules_generator user "" "" --include-model
依赖项
确保您的pubspec.yaml
文件包含以下依赖项:
dependencies:
flutter:
sdk: flutter
get: ^5.0.0-release-candidate-9.2.1
dio: ^5.7.0
dev_dependencies:
flutter_test:
sdk: flutter
mockito: ^5.4.5
http_mock_adapter: ^0.6.1
build_runner: ^2.4.14
生成结构示例
生成的结构示例如下:
- user/
- controller/
- user_controller.dart
- bindings/
- user_binding.dart
- usecases/
- create.dart
- read.dart
- update.dart
- delete.dart
- data/
- api/
- user_api.dart
- json/
- models/
- services/
- auth_service.dart
- logger_service.dart
- views/
- viewmodels/
- widgets/
- user_view.dart
生成的测试结构
当使用--include-tests
标志时,将创建以下测试文件夹结构:
- user/
- unit/
- usecases/
- create_test.dart
- read_test.dart
- update_test.dart
- delete_test.dart
- data/
- api/
- user_api_test.dart
- models/
- services/
- auth_service_test.dart
- logger_service_test.dart
- viewmodels/
- widget/
- widgets/
- user_widgets_test.dart
- user_view_test.dart
必备文件
您可以手动创建或从CLI自动生成这些文件。
api_base.dart
import 'package:dio/dio.dart';
abstract class IBaseApi {
Dio dioApi();
}
app_pages.dart
import 'package:get/get.dart';
class AppPages {
static List<GetPage<dynamic>>? getPages() {
return [
];
}
}
app_routes.dart
class AppRoutes {
}
工具生成的示例文件
控制器层
管理状态使用GetX。
user_controller.dart
import 'package:get/get.dart';
class UserController extends GetxController {}
user_binding.dart
import 'package:get/get.dart';
class UserBinding implements Binding {
[@override](/user/override)
List<Bind> dependencies() {
return [
Bind.lazyPut(() => UserController()),
];
}
}
封装业务逻辑在usecases中。
create.dart
extension Create on UserController {}
abstract class ICreateData<T> {
Future<T> consume();
}
class CreateData implements ICreateData {
[@override](/user/override)
Future consume() async {}
}
delete.dart
extension Delete on UserController {}
abstract class IDeleteData<T> {
Future<T> consume();
}
class DeleteData implements IDeleteData {
[@override](/user/override)
Future consume() async {}
}
read.dart
extension Read on UserController {}
abstract class IReadData<T> {
Future<T> consume();
}
class ReadData implements IReadData {
[@override](/user/override)
Future consume() async {}
}
update.dart
extension Update on UserController {}
abstract class IUpdateData<T> {
Future<T> consume();
}
class UpdateData implements IUpdateData {
[@override](/user/override)
Future consume() async {}
}
数据层
user_api.dart
import 'package:dio/dio.dart';
class UserApi implements IBaseApi {
static final UserApi _instance = UserApi._internal();
factory UserApi() => _instance;
UserApi._internal();
final Dio _dio = Dio(
BaseOptions(
baseUrl: 'http://api.example.com/v1',
connectTimeout: Duration(seconds: 30),
receiveTimeout: Duration(seconds: 30),
),
)..interceptors.addAll([]);
[@override](/user/override)
Dio dioApi() => _dio;
}
auth_service.dart
import 'package:dio/dio.dart';
import 'api_base.dart';
abstract class IAuthData<T> {
Future<T> consume();
}
class AuthService<T> implements IAuthData {
final IBaseApi api;
AuthService({required this.api});
[@override](/user/override)
Future<T> consume() async {
try {
// 添加您的逻辑
} on DioException catch (e) {
throw Exception(e.toString());
} catch (e) {
throw Exception(e.toString());
}
}
}
logger_service.dart
import 'package:dio/dio.dart';
import 'api_base.dart';
abstract class ILoggerData<T> {
Future<T> consume();
}
class LoggerService<T> implements ILoggerData {
final IBaseApi api;
LoggerService({required this.api});
[@override](/user/override)
Future<T> consume() async {
try {
// 添加您的逻辑
} on DioException catch (e) {
throw Exception(e.toString());
} catch (e) {
throw Exception(e.toString());
}
}
}
视图层
user_view.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class UserView extends GetView<UserController> {
const UserView({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('User View'),
),
body: Center(
child: const Text('Welcome to User View'),
),
);
}
}
更多关于Flutter模块生成插件flutter_modules_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter模块生成插件flutter_modules_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,flutter_modules_generator
是一个用于自动生成 Flutter 模块的工具,它可以帮助开发者快速地将 Flutter 项目中的一部分代码分离为独立的模块。以下是一个使用 flutter_modules_generator
的基本示例代码案例。
前提条件
- 确保你已经安装了 Flutter 和 Dart SDK。
- 确保你的 Flutter 项目已经存在。
安装 flutter_modules_generator
首先,你需要在你的 Flutter 项目中安装 flutter_modules_generator
包。可以通过添加以下依赖到你的 pubspec.yaml
文件来实现(但注意,这个包通常是通过命令行工具使用的,而不是作为常规依赖项):
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
# flutter_modules_generator 不是一个常规的依赖项,因此不需要在这里添加
# 但你需要确保全局安装了 flutter_modules_generator 工具
然而,flutter_modules_generator
实际上是一个命令行工具,而不是一个 Flutter 包依赖。你需要通过以下命令全局安装它:
dart pub global activate flutter_modules_generator
配置 module_config.yaml
在你的 Flutter 项目根目录下创建一个 module_config.yaml
文件,用于配置模块生成的相关信息。以下是一个简单的配置示例:
# module_config.yaml
flutter_modules:
- name: my_feature_module
platform_channels: true
plugin: false
host_app_dependencies: true
include_fonts: true
include_assets: true
include_ios_bitcode: true
使用 flutter_modules_generator 生成模块
在命令行中导航到你的 Flutter 项目根目录,然后运行以下命令来生成模块:
flutter_modules_generator generate
这个命令会根据 module_config.yaml
中的配置生成一个新的 Flutter 模块。生成的模块通常会位于你项目根目录下的一个新文件夹中(例如,my_feature_module
)。
生成的模块结构
生成后的模块会包含标准的 Flutter 模块结构,例如:
my_flutter_app/
├── android/
├── ios/
├── lib/
│ └── main.dart
├── my_feature_module/ # 这是生成的模块
│ ├── android/
│ ├── ios/
│ ├── lib/
│ │ └── main.dart
│ ├── .gitignore
│ ├── .metadata
│ ├── pubspec.yaml
│ └── README.md
├── pubspec.yaml
└── ...
使用生成的模块
在生成模块后,你可以在其他 Flutter 应用或模块中通过添加依赖来使用它。例如,在 pubspec.yaml
中添加以下依赖:
dependencies:
flutter:
sdk: flutter
my_feature_module:
path: ./my_feature_module
然后,你可以在你的 Flutter 应用中导入并使用该模块:
import 'package:my_feature_module/main.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 使用 my_feature_module 中的组件或功能
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My Flutter App'),
),
body: Center(
child: MyFeatureWidget(), // 假设这是 my_feature_module 中定义的一个组件
),
),
);
}
}
总结
以上是使用 flutter_modules_generator
生成 Flutter 模块的基本步骤和代码案例。通过这个工具,你可以快速地将 Flutter 项目中的一部分代码分离为独立的模块,从而提高代码的可重用性和模块化程度。