当前位置: 首页 > news >正文

Flutter封装模板及最佳实践

以下是一个完整且全面的Flutter封装模板,包含统一标题栏、状态管理、网络请求、路由管理等核心模块,采用分层架构设计:


项目结构

lib/
├── core/
│   ├── base/
│   │   ├── base_controller.dart   // 状态管理基类
│   │   ├── base_view.dart         // 页面基类
│   │   └── base_model.dart        // 数据模型基类
│   ├── utils/
│   │   ├── screen_util.dart       // 屏幕适配
│   │   ├── log_util.dart          // 日志工具
│   │   └── storage_util.dart      // 本地存储
│   ├── network/
│   │   ├── dio_client.dart        // Dio封装
│   │   ├── api_exception.dart     // 异常处理
│   │   └── api_response.dart      // 统一响应体
│   └── theme/
│       ├── app_colors.dart        // 颜色常量
│       ├── app_text_style.dart    // 文字样式
│       └── app_theme.dart         // 主题配置
├── common/
│   ├── widgets/
│   │   ├── app_bar.dart           // 统一标题栏
│   │   ├── loading.dart           // 加载组件
│   │   └── empty_view.dart        // 空视图
│   └── values/
│       └── strings.dart           // 多语言
├── modules/                       // 业务模块
└── main.dart

核心模块实现

1. 统一标题栏 (common/widgets/app_bar.dart)
class CustomAppBar extends AppBar {CustomAppBar({String title = "",bool showBack = true,List<Widget>? actions,}) : super(title: Text(title, style: AppTextStyle.title),centerTitle: true,elevation: 0,backgroundColor: AppColors.primary,automaticallyImplyLeading: showBack,leading: showBack ? const BackButton(color: Colors.white) : null,actions: actions,);
}
2. 状态管理基类 (core/base/base_controller.dart)
import 'package:get/get.dart';abstract class BaseController extends GetxController {final isLoading = false.obs;final errorMessage = ''.obs;void setLoading(bool value) => isLoading.value = value;void handleError(dynamic error) {errorMessage.value = error.toString();setLoading(false);}void onClose() {isLoading.close();errorMessage.close();super.onClose();}
}
3. 页面基类 (core/base/base_view.dart)
abstract class BaseView<T extends BaseController> extends GetView<T> {const BaseView({Key? key}) : super(key: key);Widget build(BuildContext context) {return Scaffold(appBar: buildAppBar(),body: Obx(() {if (controller.isLoading.value) return const LoadingWidget();if (controller.errorMessage.isNotEmpty) {return ErrorView(message: controller.errorMessage.value);}return buildBody(context);}),);}PreferredSizeWidget? buildAppBar() => null;Widget buildBody(BuildContext context);
}
4. 网络请求封装 (core/network/dio_client.dart)
class DioClient {static final Dio _dio = Dio(BaseOptions(baseUrl: 'https://api.example.com',connectTimeout: 5000,receiveTimeout: 3000,))..interceptors.add(LogInterceptor())..interceptors.add(InterceptorsWrapper(onError: (error, handler) {throw ApiException.fromDioError(error);},));static Future<ApiResponse> get(String path, {Map<String, dynamic>? params}) async {try {final response = await _dio.get(path, queryParameters: params);return ApiResponse.success(response.data);} on ApiException catch (e) {return ApiResponse.failure(e.toString());}}// 其他请求方法...
}
5. 屏幕适配工具 (core/utils/screen_util.dart)
class ScreenUtil {static late double screenWidth;static late double screenHeight;static void init(BuildContext context) {final mediaQuery = MediaQuery.of(context);screenWidth = mediaQuery.size.width;screenHeight = mediaQuery.size.height;}static double scaleWidth(double size) => size * (screenWidth / 375);
}

使用示例

业务页面实现
class HomePage extends BaseView<HomeController> {const HomePage({Key? key}) :<
http://www.lryc.cn/news/604588.html

相关文章:

  • git本地仓库,工作区和暂存区的知识
  • 操作系统- lecture3(进程的定义)
  • RAG:检索增强生成的范式演进、技术突破与前沿挑战
  • 通义万相文生图模型wan2.2-t2i-flash和wan2.2-t2i-plus全维度深度对比
  • 通达OA服务器无公网IP网络,如何通过内网穿透实现外网远程办公访问OA系统
  • FIN1531 LVDS输出
  • SpringBoot升级2.5.3 2.6.8
  • Vue3 Composition API
  • 【LeetCode 热题 100】33. 搜索旋转排序数组——(解法二)一次二分
  • Kong API Gateway的十年进化史
  • Zookeeper符合cap中的AP还是CP
  • FPGA(或者数字电路)中组合逻辑和时序逻辑是怎么划分的
  • 域名https证书
  • 全栈(day1)
  • springboot本地访问https链接,证书错误
  • python基础语法1,python语法元素(简单易上手的python语法教学)(课后习题)
  • 深度学习(鱼书)day06--神经网络的学习(后两节)
  • 【自动化运维神器Ansible】Ansible常用模块之user模块详解
  • css初学者第二天
  • 认识RobotStudio的软件界面
  • Q2流动式起重机司机证理论考试真题
  • solidity 中 Eth 和 Usd 到底如何转换
  • 关于项目的一些完善功能
  • AD里面出现元器件PCB封装不能编辑的情况
  • 使用SpringBoot 3.2.4 + CXF 4.0.0 + JDK17实现WebService服务
  • 招工招聘小程序系统开发——打造一站式招聘服务平台
  • duiLib 自定义资源目录
  • C语言《智能自平衡小车,实现平衡功能的基础上,加入了超声波避障、超声波跟随、蓝牙遥控等功能》+源代码+文档说明
  • ECharts从入门到精通:解锁数据可视化的魔法世界
  • 游戏盾能够防御哪些类型攻击?从哪些方面防护?