import 'package:flutter/material.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; enum WidgetType { normal, // 正常状态 skeleton, // 显示骨架 } /* Widget生成工厂, 用于生成flutter端组件 */ class WidgetFactory { static Map widgetCreaters = Map(); /** * @description: 注册组件 * @param {name} 组件名,唯一 * @return: */ static void regist(String name, WidgetCreater creater) { if (!widgetCreaters.containsKey(name)) { widgetCreaters[name] = creater; } } /** * @description: 创建组件 * @param {String} 组件注册的名字 * @return: */ static List create( String name, { // 组件名 Map model, WidgetType type, // 组件显示类型,普通/骨架 bool isSliver, // 是否加载sliver组件 }) { WidgetCreater creater; if (widgetCreaters.containsKey(name)) { creater = widgetCreaters[name]; List result = []; if (type == WidgetType.normal) result = creater.createWidgets(model); else result = creater.createSkeleton(model); if (isSliver) { if (creater.isSliverChild()) { return result; } else { return result.map((widget) { return SliverToBoxAdapter(child: widget); }).toList(); } } else { if (creater.isSliverChild()) { return _createEmpty(); } else { return result; } } } return _createEmpty(); } static List _createEmpty() { const bool inProduction = const bool.fromEnvironment("dart.vm.product"); if (!inProduction) { return []; } else { return [EmptyPage()]; } } /** * @description: 是否注册组件 * @param {bool} * @return: */ static bool hasRegisted(String name) { return widgetCreaters.containsKey(name); } }