part of 'main.dart'; class ViewBuilder{ EntityCollection entityCollection; List _views; ViewBuilder({ Key key, this.entityCollection }) { _compose(); } Widget buildWidget(BuildContext context) { return ViewBuilderWidget( entities: _views ); } void _compose() { TheLogger.log("Debug", "Rebuilding all UI..."); _views = []; if (!entityCollection.hasDefaultView) { _views.add(_composeDefaultView()); } _views.addAll(_composeViews()); } View _composeDefaultView() { Map> userGroupsList = entityCollection.getDefaultViewTopLevelEntities(); List entitiesForView = []; userGroupsList["userGroups"].forEach((groupId){ TheLogger.log("Debug","----User defined group: $groupId"); Entity en = entityCollection.get(groupId); if (en.isGroup) { en.childEntities = entityCollection.getAll(en.childEntityIds); } entitiesForView.add(en); }); userGroupsList["notGroupedEntities"].forEach((entityId){ entitiesForView.add(entityCollection.get(entityId)); }); return View( entities: entitiesForView, count: 0 ); } List _composeViews() { List result = []; int counter = 0; entityCollection.viewList.forEach((viewId) { counter += 1; //try { Entity viewGroupEntity = entityCollection.get(viewId); List entitiesForView = []; viewGroupEntity.childEntityIds.forEach(( entityId) { //Each entity or group in view if (entityCollection.isExist(entityId)) { Entity en = entityCollection.get(entityId); if (en.isGroup) { en.childEntities = entityCollection.getAll(en.childEntityIds); } entitiesForView.add(en); } else { TheLogger.log("Warning", "Unknown entity inside view: $entityId"); } }); result.add(View( count: counter, entities: entitiesForView )); /*} catch (error) { TheLogger.log("Error","Error parsing view: $viewId"); }*/ }); return result; } } class ViewBuilderWidget extends StatelessWidget { final List entities; const ViewBuilderWidget({ Key key, this.entities }) : super(key: key); @override Widget build(BuildContext context) { return TabBarView( children: _buildChildren(context) ); } List _buildChildren(BuildContext context) { List result = []; entities.forEach((View view){ result.add(view.buildWidget(context)); }); return result; } }