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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
[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