Problema com initStaste usando PublishSubject #22
Replies: 3 comments · 9 replies
-
Opa @lucasgm1997, cara voce tem esse codigo em um repositorio no git ? Olhando apenas esses trechos nao deu pra entender muito bem seu codigo |
Beta Was this translation helpful? Give feedback.
All reactions
-
Pior que é o projeto do trabalho, se não, eu subia para o repositório. |
Beta Was this translation helpful? Give feedback.
All reactions
-
O que esta acontecendo é que algumas tabs passa pelo initState, tanto quando eu avanço para a posterior, tab 4 para tab 5, ou quando eu volto para anterior, da tab 6 para tab 5, tab 5 para tab 4. Mas na tab3, só passa pelo iniState quando ela não existe, da tab 2 para a tab 3. Mas da tab 4 para a 3 não passa pelo initState. |
Beta Was this translation helpful? Give feedback.
All reactions
-
Então e que olhando o código assim me pareceu um pouco confuso você tá usando streams, setState e vi algo ali que me parece um reaction do mobx. Talvez algo esteja causando conflito |
Beta Was this translation helpful? Give feedback.
All reactions
-
👍 3
-
Realmente ta um tanto confuso haha, estou desbravando essa mata kkkk. |
Beta Was this translation helpful? Give feedback.
All reactions
-
Não sei se vc está usando PageView ou PageView.builder, mas olhando um pouco do código, parece que isso é um problema relacionado com a mudança das tabs no PageView. Se vc puder passar um pouco mais de informações sobre o código, acredito que ajudaria mais. Algumas dicas que tenho em relação a isso: no seu método @override
void initState(){
super.initState();
log('initState has been called');
}
@override
void dispose(){
log('dispose has been called');
super.dispose(); Sobre PageView |
Beta Was this translation helpful? Give feedback.
All reactions
-
Então, propriamente dito nas tabs não esta sendo usado PageView.Builder. class ContentTabHostView extends StatefulWidget {
ContentTabHostView({Key? key}) : super(key: key);
@override
_ContentTabHostViewState createState() => _ContentTabHostViewState();
}
class _ContentTabHostViewState extends State<ContentTabHostView>
with TickerProviderStateMixin {
List<NavigationTab> _navigationTabs = [
NavigationTab(
navigationTabEnum: NavigationTabEnum.others,
tab: Tab(icon: Icon(Icons.show_chart), text: "DASHBOARD"),
view: DashboardView(),
),
NavigationTab(
navigationTabEnum: NavigationTabEnum.others,
tab: Tab(icon: Icon(Icons.compare_arrows), text: "ROTAS"),
view: RoutesView(),
)
];
final PackageInfoStore _packageInfoStore = GetIt.I<PackageInfoStore>();
final RouteStore _routeStore = GetIt.I<RouteStore>();
final TabStore _tabStore = GetIt.I<TabStore>();
final LoginStore _loginStore = GetIt.I<LoginStore>();
@override
void initState() {
NavigationTabsUtil().initStreams();
_tabStore.tabsController = TabController(
vsync: this,
length: _navigationTabs.length,
);
_packageInfoStore.getAppVersion();
initListenerTabs();
reaction(
(_) => _routeStore.selectedRoute, (RouteSync? value) => refreshTab());
super.initState();
}
void refreshTab() {
_navigationTabs = NavigationTabsUtil.clearToRoute(_navigationTabs);
if (_tabStore.tabsController != null) _tabStore.tabsController!.dispose();
setState(() {
_tabStore.tabsController = TabController(
vsync: this,
length: _navigationTabs.length,
initialIndex: _navigationTabs.length - 1,
);
});
}
void addNewTab(int length, [int animateTo = 1]) {
if (_tabStore.tabsController != null) _tabStore.tabsController!.dispose();
_tabStore.tabsController = TabController(
vsync: this, length: length, initialIndex: (length - 1) - animateTo);
_tabStore.tabsController!.animateTo(_navigationTabs.length - animateTo);
_tabStore.tabsController!.addListener(() async {
if (_navigationTabs.length > 2 && _tabStore.tabsController!.index == 1) {
await Future.delayed(Duration(milliseconds: 300));
if (_tabStore.tabsController != null)
_tabStore.tabsController!.dispose();
setState(() {
_tabStore.tabsController = TabController(
vsync: this,
length: _navigationTabs.length,
initialIndex: 1,
);
});
}
});
}
void initListenerTabs() {
NavigationTabsUtil().routeToOpen.listen(
(value) {
var tabsEnums = _navigationTabs.map((e) => e.navigationTabEnum);
if (tabsEnums.contains(NavigationTabEnum.route)) {
_navigationTabs = NavigationTabsUtil.clearToRoute(_navigationTabs);
}
_navigationTabs.add(
NavigationTab(
navigationTabEnum: NavigationTabEnum.route,
tab: Tab(
icon: Icon(Icons.compare_arrows),
text: value.route.name.toString().toUpperCase(),
),
view: RouteDetailView(value),
),
);
setState(() => addNewTab(_navigationTabs.length));
},
);
NavigationTabsUtil().equipmentToOpen.listen(
(subNode) {
_routeStore.setSelectedSubNode(subNode);
_routeStore.resetListTreeNodeSelectd();
var tabsEnums = _navigationTabs.map((e) => e.navigationTabEnum);
if (tabsEnums.contains(NavigationTabEnum.equipment)) {
_navigationTabs = NavigationTabsUtil.clearToEquipment(
_navigationTabs,
);
}
_navigationTabs.add(NavigationTab(
navigationTabEnum: NavigationTabEnum.equipment,
tab: Tab(
icon: Icon(Icons.miscellaneous_services,
size: 30, color: Colors.white),
text: subNode.name!.toUpperCase(),
),
view: ComponentView(subNode: subNode)));
setState(() => addNewTab(_navigationTabs.length));
},
);
NavigationTabsUtil().sensorReadingToOpen.listen(
(indexedNodeList) {
var tabsEnums = _navigationTabs.map((e) => e.navigationTabEnum);
if (tabsEnums.contains(NavigationTabEnum.inspectComponent) ||
tabsEnums.contains(NavigationTabEnum.checklist)) {
_navigationTabs = NavigationTabsUtil.clearToInspect(_navigationTabs);
}
_navigationTabs.add(
NavigationTab(
navigationTabEnum: NavigationTabEnum.inspectComponent,
tab: Tab(
icon: Icon(Icons.miscellaneous_services),
text: 'Coletar dados',
),
view: SensorReadingView(indexedNodeList),
),
);
setState(() => addNewTab(_navigationTabs.length));
},
);
NavigationTabsUtil().checklistToOpen.listen(
(subNode) {
var tabsEnums = _navigationTabs.map((e) => e.navigationTabEnum);
_routeStore.setSelectedSubNode(subNode);
if (tabsEnums.contains(NavigationTabEnum.inspectComponent) ||
tabsEnums.contains(NavigationTabEnum.checklist)) {
_navigationTabs = NavigationTabsUtil.clearToChecklist(
_navigationTabs,
);
}
late Checklist? _associatedChecklist =
ChecklistUtil.getAssociatedCheckList(
selectedRoute: _routeStore.selectedRoute!,
checklistId: subNode.checklistId!,
);
if (_associatedChecklist != null) {
_navigationTabs.add(
NavigationTab(
navigationTabEnum: NavigationTabEnum.checklist,
tab: Tab(
icon: Icon(Icons.help_outline),
text: subNode.name.toString().toUpperCase(),
),
view: GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: CheckListView(
associatedChecklist: _associatedChecklist,
selectedSubNode: subNode,
),
)),
);
_navigationTabs.add(
NavigationTab(
navigationTabEnum: NavigationTabEnum.checklistQuestions,
tab: Tab(
icon: Icon(Icons.help_outlined),
text: 'Perguntas',
),
view: ChecklistQuestionsView(
associatedChecklist: _associatedChecklist,
selectedSubNode: subNode,
),
),
);
}
setState(() => addNewTab(_navigationTabs.length, 2));
},
);
}
@override//content_tab_host_view.dart
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
int currentIndex = _tabStore.tabsController!.index;
if (currentIndex > 0) {
_tabStore.tabsController!.animateTo(currentIndex - 1);
return Future.value(false);
}
return Future.value(true);
},
child: DefaultTabController(
length: _navigationTabs.length,
child: Scaffold(
appBar: AppBar(
brightness: Brightness.dark,
actions: [
PopupMenuButton(
itemBuilder: (BuildContext bc) => [
PopupMenuItem(child: Text("Sair"), value: "/logout"),
PopupMenuItem(
enabled: false,
child: Observer(
builder: (context) {
return Text(
_packageInfoStore.appVersion ?? '',
style: TextStyle(
fontSize: 10,
),
);
},
),
),
],
onSelected: (dynamic route) {
if (route == "/logout") {
_routeStore.routes.clear();
_loginStore.logout(context);
}
},
)
],
bottom: TabBar(
labelPadding: EdgeInsets.symmetric(horizontal: 20.0),
isScrollable: _navigationTabs.length > 2 ? true : false,
automaticIndicatorColorAdjustment: true,
tabs: (_navigationTabs.map((e) => e.tab!).toList()),
controller: _tabStore.tabsController),
flexibleSpace: Container(
decoration: ThemeUtil.getDefaultAppBarBoxDecoration(),
),
title: Text("VBSIS" +
"${Config.APP_ENVIRONMENT != 'Production' ? Config.APP_ENVIRONMENT : ''}"),
),
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
controller: _tabStore.tabsController,
children: _navigationTabs.map((e) => e.view!).toList(),
)),
));
}
@override
void dispose() {
NavigationTabsUtil().closeStreams();
if (_tabStore.tabsController != null) {
_tabStore.tabsController!.dispose();
}
super.dispose();
}
} |
Beta Was this translation helpful? Give feedback.
All reactions
-
O app começa com duas TABs (DASHBOARD e ROTAS). Na TAB ROTAS (segunda tab), eu navego para as seguintes, é uma arvore de pastas. import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';
import 'package:vbc_sim_app/model/indexed_node_list.dart';
import 'package:vbc_sim_app/model/route/node/node.dart';
import 'package:vbc_sim_app/model/route/route_sync.dart';
class NavigationTabsUtil {
late PublishSubject<RouteSync> routeToOpen;
late PublishSubject<Node> equipmentToOpen;
late PublishSubject<Node> checklistToOpen;
late PublishSubject<IndexedNodeList> sensorReadingToOpen;
NavigationTabsUtil._() {
initStreams();
}
static final NavigationTabsUtil _instance = NavigationTabsUtil._();
factory NavigationTabsUtil() {
return _instance;
}
void initStreams() {
routeToOpen = PublishSubject<RouteSync>();
equipmentToOpen = PublishSubject<Node>();
checklistToOpen = PublishSubject<Node>();
sensorReadingToOpen = PublishSubject<IndexedNodeList>();
}
void closeStreams() {
routeToOpen.close();
equipmentToOpen.close();
checklistToOpen.close();
sensorReadingToOpen.close();
}
static List<NavigationTab> clearToRoute(
List<NavigationTab> _navigationTabs,
) {
_navigationTabs.removeWhere((tab) =>
tab.navigationTabEnum == NavigationTabEnum.route ||
tab.navigationTabEnum == NavigationTabEnum.equipment ||
tab.navigationTabEnum == NavigationTabEnum.inspectComponent ||
tab.navigationTabEnum == NavigationTabEnum.checklist ||
tab.navigationTabEnum == NavigationTabEnum.checklistQuestions);
return _navigationTabs;
}
static List<NavigationTab> clearToEquipment(
List<NavigationTab> _navigationTabs,
) {
_navigationTabs.removeWhere((tab) =>
tab.navigationTabEnum == NavigationTabEnum.equipment ||
tab.navigationTabEnum == NavigationTabEnum.inspectComponent ||
tab.navigationTabEnum == NavigationTabEnum.checklist ||
tab.navigationTabEnum == NavigationTabEnum.checklistQuestions);
return _navigationTabs;
}
static List<NavigationTab> clearToInspect(
List<NavigationTab> _navigationTabs,
) {
_navigationTabs.removeWhere((tab) =>
tab.navigationTabEnum == NavigationTabEnum.inspectComponent ||
tab.navigationTabEnum == NavigationTabEnum.checklist ||
tab.navigationTabEnum == NavigationTabEnum.checklistQuestions);
return _navigationTabs;
}
static List<NavigationTab> clearToChecklist(
List<NavigationTab> _navigationTabs,
) {
_navigationTabs.removeWhere((tab) =>
tab.navigationTabEnum == NavigationTabEnum.checklist ||
tab.navigationTabEnum == NavigationTabEnum.checklistQuestions ||
tab.navigationTabEnum == NavigationTabEnum.inspectComponent);
return _navigationTabs;
}
}
class NavigationTab {
Widget? view;
Tab? tab;
NavigationTabEnum? navigationTabEnum;
NavigationTab({
this.view,
this.tab,
this.navigationTabEnum,
});
}
enum NavigationTabEnum {
route,
equipment,
checklist,
checklistQuestions,
inspectComponent,
others
} |
Beta Was this translation helpful? Give feedback.
All reactions
-
Vi aqui, quando eu saio da TAB 3, para outra ela não da dispose.
|
Beta Was this translation helpful? Give feedback.
All reactions
-
//route_detail_view
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:get_it/get_it.dart';
import 'package:intl/intl.dart';
import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:vbc_sim_app/model/route/route_sync.dart';
import 'package:vbc_sim_app/stores/route_detail_view_controller.dart';
import 'package:vbc_sim_app/stores/tab_store.dart';
import 'package:vbc_sim_app/helpers/percente.dart' as percenteHelp;
import 'package:vbc_sim_app/views/route/components/route_detailNodesTree.dart';
class RouteDetailView extends StatefulWidget {
final RouteSync routeSync;
RouteDetailView(this.routeSync, {Key? key}) : super(key: key);
@override
_RouteDetailViewState createState() => _RouteDetailViewState();
}
class _RouteDetailViewState extends State<RouteDetailView> {
final TabStore _tabStore = GetIt.I<TabStore>();
RouteDetailViewControlller _routeDetailControlller =
RouteDetailViewControlller();
@override
void initState() {
super.initState();
_tabStore.setLastIndex(AppTabs.ROUTES);
log('tab 3 initState has been called');
}
@override
void dispose() {
super.dispose();
log('tab 3 dispose has been called');
}
int countDays() {
final difference2 = _routeDetailControlller
.routeStore.selectedRoute!.expectedAt!
.difference(DateTime.now())
.inDays;
return difference2;
}
bool isWithoutPeriod() {
if (_routeDetailControlller.routeStore.selectedRoute!.expectedAt == null) {
return true;
}
return false;
}
String getDayString() {
if (isWithoutPeriod()) {
return 'Sem periocidade';
}
int days = countDays();
if (days < 0) {
return 'Leitura atrasada em ${days * -1} dias';
} else if (days == 0) {
return 'Próxima leitura amanhã';
} else {
return 'Próxima leitura em $days dia(s)';
}
}
lastExecution() {
var timeString =
_routeDetailControlller.routeStore.selectedRoute?.lastExecution ??
DateTime.now();
var newDate = DateFormat('dd/MM/yyyy hh:mm').format(timeString);
return newDate.toString();
}
@override
Widget build(BuildContext context) {
var textSize = MediaQuery.of(context).textScaleFactor;
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return Container(
child: SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: viewportConstraints.maxHeight,
),
child: Observer(builder: (context) {
return Column(
children: [
Container(
width: MediaQuery.of(context).size.width,
height: 200,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
colorFilter: ColorFilter.mode(
Colors.black.withAlpha(180), BlendMode.srcOver),
image: AssetImage(
"assets/images/mock/route_detail_image.jpg",
),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Container(
constraints: BoxConstraints(
maxWidth: viewportConstraints.maxWidth * 0.7),
child: Padding(
padding: const EdgeInsets.all(10),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'${_routeDetailControlller.routeStore.selectedRoute?.route.name}',
style: TextStyle(
fontSize: 25,
color: Colors.white,
fontWeight: FontWeight.bold),
),
SizedBox(
height: 25,
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(
Icons.domain_verification_outlined,
color: Colors.grey.shade400,
size: 35,
),
Text(
'${getDayString()}',
style: TextStyle(
color: Colors.white,
fontSize: textSize * 15),
)
],
),
SizedBox(
height: 8,
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(
Icons.timer_outlined,
color: Colors.grey.shade400,
size: 35,
),
Flexible(
child: Text(
'Última execução ${lastExecution()}',
style: TextStyle(
color: Colors.white,
fontSize: textSize * 15),
),
)
],
),
],
),
),
),
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Stack(
alignment: Alignment.center,
children: [
Container(
height:
viewportConstraints.maxWidth * 0.26,
width:
viewportConstraints.maxWidth * 0.26,
decoration: BoxDecoration(
color: Colors.transparent,
border:
Border.all(color: Colors.grey),
shape: BoxShape.circle),
),
CircularPercentIndicator(
radius:
viewportConstraints.maxWidth * 0.23,
lineWidth: 5.0,
percent: percenteHelp.retunPercente(
_routeDetailControlller.routeStore
.selectedRoute?.done ??
0,
_routeDetailControlller.routeStore
.selectedRoute?.total ??
1),
center: Text(
percenteHelp.retunTextPercente(
_routeDetailControlller.routeStore
.selectedRoute?.done ??
0,
_routeDetailControlller.routeStore
.selectedRoute?.total ??
0),
style: TextStyle(
color: Colors.white,
fontSize: 22.0,
),
),
progressColor: _routeDetailControlller
.routeStore.selectedRoute
?.getStatusColor(),
),
],
),
SizedBox(
height: 12,
),
Text(
"ADERÊNCIA",
style: TextStyle(
fontSize: 11, color: Colors.white),
),
SizedBox(
height: 8,
),
],
),
),
)
],
),
),
if (_routeDetailControlller
.routeStore.selectedRoute?.route.description !=
null) ...[
Container(
color: Colors.grey.shade300,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
"Descrição da rota",
style: TextStyle(
color: Colors.grey,
fontSize: 11,
),
),
SizedBox(
height: 8,
),
Text(
_routeDetailControlller.routeStore.selectedRoute
?.route.description ??
'',
style: TextStyle(fontSize: 12),
)
],
),
),
),
],
RouteDetailNodesTree()
],
);
})),
));
});
}
}
|
Beta Was this translation helpful? Give feedback.
All reactions
-
//component_view.dart
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:list_treeview/list_treeview.dart';
import 'package:vbc_sim_app/model/indexed_node_list.dart';
import 'package:vbc_sim_app/model/route/checklist/checklist.dart';
import 'package:vbc_sim_app/model/route/node/node.dart';
import 'package:vbc_sim_app/stores/route_store.dart';
import 'package:vbc_sim_app/stores/tab_store.dart';
import 'package:vbc_sim_app/util/checklist_util.dart';
import 'package:vbc_sim_app/util/navigation_tabs_util.dart';
import 'package:vbc_sim_app/util/nodetree/tree_load_node_util.dart';
import 'package:vbc_sim_app/util/nodetree/tree_node_data.dart';
import 'package:vbc_sim_app/util/sensor_read_util.dart';
import 'package:vbc_sim_app/util/type_node_icon_util.dart';
class ComponentView extends StatefulWidget {
const ComponentView({Key? key, this.subNode}) : super(key: key);
final Node? subNode;
@override
_ComponentViewState createState() => _ComponentViewState();
}
class _ComponentViewState extends State<ComponentView> {
final TabStore _tabStore = GetIt.I<TabStore>();
final RouteStore _routeStore = GetIt.I<RouteStore>();
final TreeViewController _controller = TreeViewController();
late List<TreeNodeData> _treeNodesData;
@override
void initState() {
super.initState();
_tabStore.setLastIndex(AppTabs.SELECTED_ROUTE);
loadNodes();
log('tab 4 initState has been called');
}
TreeNodeData? previousNode;
@override
void dispose() {
super.dispose();
_controller.dispose();
log('tab 4 dispose has been called');
}
void loadNodes() {
if (!mounted) return;
setState(() {
_treeNodesData = TreeLoadNodeUtil.loadSubNodes(widget.subNode!.childs);
var list = List<TreeNodeData>.empty(growable: true);
list.addAll(_treeNodesData);
_controller.treeData(list);
Future.delayed(const Duration(milliseconds: 300), () async {
if (_routeStore.listTreeNodeSelectd.length > 0) {
for (final index in _routeStore.listTreeNodeSelectd) {
_controller.expandOrCollapse(index);
}
}
});
});
}
bool verifyNodeTypePaused(NodeTypeEnum type, TreeNodeData item) {
switch (type) {
case NodeTypeEnum.readSensorInformation:
case NodeTypeEnum.inspectTemperatureInformation:
case NodeTypeEnum.inspectMagnitudeInformation:
return false;
case NodeTypeEnum.checklist:
final Checklist? _associatedChecklist =
ChecklistUtil.getAssociatedCheckList(
selectedRoute: _routeStore.selectedRoute!,
checklistId: item.nodes!.checklistId!,
);
String? percentage;
if (_associatedChecklist != null) {
percentage = ChecklistUtil.getAnsweredPercentage(
selectedNode: item,
associatedChecklist: _associatedChecklist,
);
return percentage != '100%' && percentage != '0%' ? true : false;
} else {
return false;
}
default:
return false;
}
}
bool verifyNodeCompleted(
NodeTypeEnum type, TreeNodeData item, RouteStore _routeStore) {
switch (type) {
case NodeTypeEnum.readSensorInformation:
case NodeTypeEnum.inspectTemperatureInformation:
case NodeTypeEnum.displacement:
return item.nodes?.hasReadingData ?? false;
case NodeTypeEnum.velocity:
return item.nodes?.hasReadingData ?? false;
case NodeTypeEnum.acceleration:
return item.nodes?.hasReadingData ?? false;
case NodeTypeEnum.inspectMagnitudeInformation:
return item.nodes?.hasReadingData ?? false;
case NodeTypeEnum.readManual:
return SensorReadUtil.isNodeVibrtionCompleted(
selectedNode: item,
);
case NodeTypeEnum.vibration:
return SensorReadUtil.isNodeFatherVibrationCompleted(
selectedNode: item,
);
case NodeTypeEnum.checklist_holder:
return ChecklistUtil.isFatherChecklistCompleted(
selectedNode: item, selectedRoute: _routeStore.selectedRoute!);
case NodeTypeEnum.checklist:
final Checklist? _associatedChecklist =
ChecklistUtil.getAssociatedCheckList(
selectedRoute: _routeStore.selectedRoute!,
checklistId: item.nodes!.checklistId!,
);
return ChecklistUtil.isCheckListCompleted(
associatedChecklist: _associatedChecklist!, selectedNode: item);
default:
return false;
}
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
children: [
ListTreeView(
shrinkWrap: true,
toggleNodeOnTap: false,
itemBuilder: (BuildContext context, NodeData data) {
TreeNodeData item = data as TreeNodeData;
var type = TypeNodeIconUtil.getNodeTypeByName(item.typeName);
var icon = TypeNodeIconUtil.getIconByType(
item.iconType, verifyNodeTypePaused(type, item),
haveReadingData: TypeNodeIconUtil.verifyNodeCompleted(
type,
item,
_routeStore.selectedRoute!,
));
double offsetX = (item.level * 16.0) + 16;
return Container(
height: 54,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
VerticalDivider(
width: 0,
color: Colors.grey,
thickness: 6,
),
Expanded(
child: Padding(
padding: EdgeInsets.only(left: offsetX),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.only(right: 5),
child: icon),
Text(
item.label!,
style: TextStyle(
fontSize: 15,
),
),
SizedBox(
width: 10,
),
],
),
),
),
Padding(
padding: EdgeInsets.only(right: 18),
child: () {
switch (type) {
case NodeTypeEnum.readSensorInformation:
case NodeTypeEnum.inspectTemperatureInformation:
case NodeTypeEnum.inspectMagnitudeInformation:
return null;
case NodeTypeEnum.checklist:
final Checklist? _associatedChecklist =
ChecklistUtil.getAssociatedCheckList(
selectedRoute: _routeStore.selectedRoute!,
checklistId: item.nodes!.checklistId!,
);
String? percentage;
if (_associatedChecklist != null) {
percentage = ChecklistUtil.getAnsweredPercentage(
selectedNode: item,
associatedChecklist: _associatedChecklist,
);
}
return Text(percentage ?? "0%");
default:
return item.isExpand
? Icon(
Icons.remove,
size: 30,
color: Colors.grey,
)
: Icon(
Icons.add,
size: 30,
color: Colors.grey,
);
}
}(),
),
],
),
);
},
onTap: (NodeData data) {
TreeNodeData item = data as TreeNodeData;
var type = TypeNodeIconUtil.getNodeTypeByName(item.typeName);
switch (type) {
case NodeTypeEnum.inspectTemperatureInformation:
case NodeTypeEnum.inspectMagnitudeInformation:
NavigationTabsUtil().sensorReadingToOpen.add(
IndexedNodeList(
index: item.indexInParent,
nodes: item.subNodesParent!.childs,
pointVibrationProperties:
data.subNodesParent?.pointVibrationProperties,
),
);
break;
case NodeTypeEnum.checklist:
NavigationTabsUtil().checklistToOpen.add(item.nodes!);
break;
case NodeTypeEnum.readSensorInformation:
NavigationTabsUtil().sensorReadingToOpen.add(
IndexedNodeList(
index: item.indexInParent,
nodes: item.subNodesParent!.childs,
pointVibrationProperties:
data.subNodesParent?.pointVibrationProperties,
),
);
break;
case NodeTypeEnum.acceleration:
NavigationTabsUtil().sensorReadingToOpen.add(
IndexedNodeList(
index: item.indexInParent,
nodes: item.subNodesParent!.childs,
pointVibrationProperties:
data.subNodesParent?.pointVibrationProperties,
),
);
break;
case NodeTypeEnum.velocity:
NavigationTabsUtil().sensorReadingToOpen.add(
IndexedNodeList(
index: item.indexInParent,
nodes: item.subNodesParent!.childs,
pointVibrationProperties:
data.subNodesParent?.pointVibrationProperties,
),
);
break;
case NodeTypeEnum.displacement:
NavigationTabsUtil().sensorReadingToOpen.add(
IndexedNodeList(
index: item.indexInParent,
nodes: item.subNodesParent!.childs,
pointVibrationProperties:
data.subNodesParent?.pointVibrationProperties,
),
);
break;
default:
_defaultController(data);
break;
}
},
controller: _controller,
),
],
),
);
}
void _defaultController(NodeData data) {
_controller.selectItem(data);
_controller.expandOrCollapse(data.index);
_routeStore.setTreeNodeDataSelectd(data);
_routeStore.setListTreeNodeSelectd(data.index);
}
}
|
Beta Was this translation helpful? Give feedback.
All reactions
-
Pessoal. Prefiram usar a dica deste post para publicar código. |
Beta Was this translation helpful? Give feedback.
-
[PublishSubject]
Fala gelera, tudo jóia? Alguém pode dar uma help? O problema que estou tendo, é que, quando eu volto da TAB 5 para a TAB 4, a pagina passa pelo initState, mas quando volto da TAB 4 para a TAB 3, não passa pelo initState.
Beta Was this translation helpful? Give feedback.
All reactions