Reputation: 3
I am trying to get driverfleet data for reviewing purpose, but instead i get the following error
E/flutter (21563): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: Bad state: No element
E/flutter (21563): #0 Iterable.first (dart:core/iterable.dart:524:7)
E/flutter (21563): #1 _ReviewTransportsalesState.driverFleet (package:project_inovation/ui/screen/ReviewTransportsales.dart:504:10)
E/flutter (21563): <asynchronous suspension>
E/flutter (21563): #2 _ReviewTransportsalesState.initState (package:project_inovation/ui/screen/ReviewTransportsales.dart:171:5)
E/flutter (21563): #3 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4684:58)
E/flutter (21563): #4 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
E/flutter (21563): #5 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
E/flutter (21563): #6 Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
this is the error code that flutter showed
driverFleet(String value) async {
FleetModel fleetModel = FleetModel(value);
API _api = API();
Response response = await _api.fleetAPI(fleetModel);
xml.XmlDocument parsedFleet = xml.parse(response.data);
String fleetName = parsedFleet
.findAllElements('DataRow')
.first
.findAllElements('field')
.elementAt(0)
.getAttribute('lval');
String fleetID = parsedFleet
.findAllElements('DataRow')
.first
.findAllElements('field')
.elementAt(1)
.getAttribute('lval');
String productID = parsedFleet
.findAllElements('DataRow')
.first
.findAllElements('field')
.elementAt(3)
.getAttribute('lval');
DriverModel driverModel = DriverModel(fleetID);
try {
var driverResponse = await _api.driverAPI(driverModel);
xml.XmlDocument parsedDriver = xml.parse(driverResponse.data);
String driverID = parsedDriver
.findAllElements('DataRow')
.first
.findAllElements('field')
.elementAt(0)
.getAttribute('lval');
String driverName = parsedDriver
.findAllElements('DataRow')
.first
.findAllElements('field')
.elementAt(1)
.getAttribute('lval');
_fleetController.text = fleetName ?? 'B 9778 PYU';
_driverController.text = driverName;
_mySelectionDriver = driverID + driverName;
_mySelectionProduct = productID;
_fleetID = fleetID ?? '1000773';
_driverID = driverID;
} catch (_) {
_fleetController.text = fleetName ?? 'B 9778 PYU';
_driverController.text = 'Aang T6';
_mySelectionDriver = '1001465Aang T6';
_mySelectionProduct = productID;
_fleetID = fleetID ?? '1000773';
_driverID = '1001427';
}
await readTransportSales(widget.recordID);
await readTransRoute(widget.recordID);
setState(() {});
}
i am asumming that this reads an empty list, based on the similar problem that i've read here, and i've tried to use their solution but still no good.
Upvotes: 0
Views: 946
Reputation: 6430
getters
like first
, last
on Iterables
are not safe to use and throw a state
error when called on empty Iterables
.
In your code, you have the second part in a try catch,
But your parsedFleet.findAllElements('DataRow')
has the possibility to return an empty Iterable
.
Move this code into a try catch as well, or perform a check before accessing .findAllElements('field')
.
Upvotes: 1