Thinh Flutter 模板 2.0
这个Flutter模板是为了减少开发过程、工作量和初始时间而编写的。该模板还提供了丰富的外部功能、简洁易读的结构。
安装
- 克隆项目(考虑使用模板)。
- 更改项目中出现的所有包名。
- 更新应用程序的资源。
文件夹结构
项目文件夹结构使用按结构划分文件夹的方法。
1. App 该文件夹包含应用程序中的所有功能。此目录的每个子文件夹都是一个独立的功能,其中common目录是通用的,可以被其他文件夹共享。
2. Base 此目录包含所有具有基本功能的基类,这些基类可以在开发过程中实现。
3. Config 该文件夹充当项目的资源库,包含
- 路由
- 颜色
- 尺寸
- 主题
- 语言
- 环境
- 常量
- 等等..
4. Generated
警告!!! 请勿修改此文件夹,因为它将在应用程序运行时自动生成。
6. Services
包含应用程序的所有服务,包括但不限于
- 对话框服务
- 共享偏好设置
- REST API服务
7. Utils
包含所有可以共享和重用于其他项目的辅助类。
8. App Runner app_runner.dart是应用程序的根目录。它包含实例化应用程序及其依赖项的块。
如何使用
前提条件
该模板遵循测试驱动开发流程和MVP架构。因此,了解以上两个概念的基础知识至关重要。
实现功能
应用程序的所有功能都放在app文件夹中。每个功能都分成三个不同的文件夹,分别命名为domain、data、presentation,用途不同。
-
Domain – 业务层所在处 包含两个子目录,分别命名为entities和services:
- Entities: The core entity of the feature, used to display to view. - Services: A contract to communicate between domain layer and data layer. -
Data – 功能的 数据源 包含两个子目录,分别命名为services、models和dto(可选):
- Services: The implementation of service specified in the domain folder. - Models: A model that is returned from application's boundary such as from API, local storage -
Presentation – 功能的视图 包含三个子目录,分别命名为pages、business-logic-handler、widgets:
- pages: Contains pages of the features - business-logic-handler: This is the component communicates with domain layer and depends on the state managment, whether it could be a bloc, provider, controller, etc... - widgets (optional): contains widgets used accross pages
处理API / 数据处理程序
通常,在使用Provider时,我们经常需要处理在API执行之前/之后进行导航的情况(例如:显示加载,显示对话框……)。默认情况下,Provider包仅支持在状态更改时重新加载UI,而不支持在公开新状态时进行导航(类似于BlocListener)。因此,使用
apiCallSafety可以避免此问题。
- 将API调用函数从UI包装在
apiCallSafety方法中(在ApiError mixin中) - 通过提交这些回调的实现来处理调用流程
-
Future<void> Function()? onStart在执行API之前调用。 -
Future<void> Function()? onCompleted在API执行完成后立即调用。 -
Future<void> Function(T? res)? onSuccess在onCompleted之后成功调用。 -
Future<void> Function(dynamic error)? onError在onCompleted之后出错调用。 -
Future<void> Function()? onFinally最后调用,无论成功还是失败。 -
Future<bool> Function()? unauthorized当API返回401 – 未授权时调用。如果希望转发到应用程序身份验证失败处理程序,则返回true,否则将忽略。
-
- 如果需要,请通过状态实现API错误处理程序。
应用程序配置
根据应用程序的规格,您将需要修改多个值和配置以满足要求。
修改环境变量
AppConfig(env: Env.dev());
- 要添加更多环境,只需将其添加到env文件夹中,遵循结构并使用指定的新的
main_env.dart文件更新env_type.dart
从环境运行应用程序
要在开发环境中运行应用程序,请考虑
flutter run --release -t lib/main_prod.dart
配置本地化
-
要添加更多本地化(语言、资源),请转到translation文件夹并添加新的
language-code.json文件或修改现有的资源。例如:en.json -
使用此命令生成密钥
flutter pub run easy_localization:generate -S assets/translations -o locale_keys.g.dart -f keys
- 将密钥转换为字符串资源
tr(LocaleKeys.key_name)
路由
由于应用程序遵循按功能划分文件夹的结构,因此每个页面都包含一个不同的业务逻辑处理程序。对于此项目,我们在routes.dart中实例化它。
要为应用程序添加命名路由,请修改rooutes.dart文件中的onGenerateRoute函数。
基本API响应模型。
应用程序的RestAPI服务依赖于定义的Base模型。您可以通过修改base_response.dart来覆盖此模型。服务器错误也将被解析为模型。
应用程序依赖项
Flutter 3.3.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ffccd96b62 (5 days ago) • 2022-08-29 17:28:57 -0700
Engine • revision 5e9e0e0aa8
Tools • Dart 2.18.0 • DevTools 2.15.0
flutter_screenutil: ^5.5.4
responsive_framework: ^0.2.0
easy_localization: ^3.0.0
dio: ^4.0.6
provider: ^6.0.2
get_it: ^7.2.0
intl: ^0.17.0
google_fonts: ^3.0.1
shared_preferences: ^2.0.15
logger: ^1.1.0
许可证
麻省理工学院许可证
版权所有 © 2022 Le Hoang Thinh
本项目免费使用,可用于商业用途,但是,请添加许可证并在将此模板应用于生产应用程序之前与我联系。