in my application I have this one stateful widget which suppose to refresh it's content on based on an API call. and when ever I try to do that I get that above error.
[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: setState() called in constructor: _DailyGuidePageState#44199(lifecycle state: created, no widget, not mounted)
This happens when you call setState() on a State object for a widget that hasn't been inserted into the widget tree yet. It is not necessary to call setState() in the constructor, since the state is already assumed to be dirty when it is initially created.
I can provide you with my code for the screen. I am so stuck in this. all I need is to call the api whenever I navigate to this screen. and upon the data. refresh the view. I have failed to achieve that though. can anyone help me with this, ?
The Stateful Widget Init
@override
void initState() {
super.initState();
_getLocalData();
}
Future<void> _getLocalData() async {
petPrefs = await SharedPreferences.getInstance();
// setState(() {
isFirst = petPrefs.getBool('first_time');
_userEmail = petPrefs.getString('user_email');
// print(_userEmail);
_userToken = petPrefs.getString('user_token');
// print(_userEmail);
_petID = petPrefs.getString('pet_id');
_userSubscribed = petPrefs.getBool('user_subscribed');
numberOfPets = petPrefs.getInt('pets_number');
isImperial = petPrefs.getBool('user_imperial');
if(mounted) {
setState(() {
inputUnit = isImperial ? 'oz' : 'g';
});
}
_dailyGuides = await getDailyGuideModel();
// await futureBuilder();
await _fetchData(_petID);
}
// Future<void>
_fetchData(String item) async {
await _getConnect().then((value) async {
if(mounted){
return;
}
if (value) {
_isData = true;
await _loadThePetData(item);
}
});
}
Future<void> _loadThePetData(String item) async{
String _baseUrl = '';
String _fullUrl = '';
String apiUrl = '';
if (_petID != null) {
apiUrl = 'pets/fetch?user_email=$_userEmail&user_token=$_userToken&pet[id]=$item';
_baseUrl = 'https://api.pawfect-balance.oz.to/';
_fullUrl = _baseUrl + apiUrl;
} else {
setState(() {
_isData = true;
});
_showSnackbar('No pets found to fetch data', errorNet);
}
var response = await http.get(_fullUrl).timeout(const Duration(seconds: 30), onTimeout: () {
// pr.hide();
setState(() {
_showAlert = true;
});
_showSnackbar('Connection Timed out, Please Try Again Later.', errorNet);
throw TimeoutException('The connection has timed out, Please try again!');
});
print('------------Pet Info--------------');
print(response);
if (response.statusCode == 200) {
String res = response.body;
var resJson = json.decode(res);
if (resJson["success"]) {
PET.PetFetch _pet = PET.PetFetch.fromJson(resJson);
//
_muscleMeatVal =
_pet.result.dailyAllowanceGuidelinesDetails[0].percentage;
// _muscleMeatVal = dailyAllowances[0]["percentage"]; //.dailyAllowanceGuidelinesDetails[0].percentage;
_organMeatVal =
_pet.result.dailyAllowanceGuidelinesDetails[1].percentage;
// _organMeatVal = dailyAllowances[1]["percentage"];
_fruitNVegVal =
_pet.result.dailyAllowanceGuidelinesDetails[2].percentage;
// _fruitNVegVal = dailyAllowances[2]["percentage"];
_boneVal =
_pet.result.dailyAllowanceGuidelinesDetails[3].percentage;
// _boneVal = dailyAllowances[3]["percentage"];
if (isImperial) {
valProtein = double.parse(
_pet.result.nutrientGuidelineDetail[0].imperialAmount);
valCrudeFat = double.parse(
_pet.result.nutrientGuidelineDetail[1].imperialAmount);
} else {
valProtein = _pet.result.nutrientGuidelineDetail[0].amount;
valCrudeFat = _pet.result.nutrientGuidelineDetail[1].amount;
}
//
valCalciumPhosphorusRatio =
_pet.result.nutrientGuidelineDetail[2].amount;
valOmega3_6Ratio = _pet.result.nutrientGuidelineDetail[3].amount;
//
valOmega6 = _pet.result.nutrientGuidelineDetail[4].amount;
unitOmega6 = _pet.result.nutrientGuidelineDetail[4].unit.toString();
valOmega3exclALAandSDA =
_pet.result.nutrientGuidelineDetail[5].amount;
unitOmega3exclALAandSDA =
_pet.result.nutrientGuidelineDetail[5].unit.toString();
valCalcium = _pet.result.nutrientGuidelineDetail[6].amount;
unitCalcium =
_pet.result.nutrientGuidelineDetail[6].unit.toString();
valPhosphorus = _pet.result.nutrientGuidelineDetail[7].amount;
unitPhosphorus =
_pet.result.nutrientGuidelineDetail[7].unit.toString();
valPotassium = _pet.result.nutrientGuidelineDetail[8].amount;
unitPotassium =
_pet.result.nutrientGuidelineDetail[8].unit.toString();
valSodium = _pet.result.nutrientGuidelineDetail[9].amount;
unitSodium = _pet.result.nutrientGuidelineDetail[9].unit.toString();
valMagnesium = _pet.result.nutrientGuidelineDetail[10].amount;
unitMagnesium =
_pet.result.nutrientGuidelineDetail[10].unit.toString();
valIron = _pet.result.nutrientGuidelineDetail[11].amount;
unitIron = _pet.result.nutrientGuidelineDetail[11].unit.toString();
valCopper = _pet.result.nutrientGuidelineDetail[12].amount;
unitCopper =
_pet.result.nutrientGuidelineDetail[12].unit.toString();
valManganese = _pet.result.nutrientGuidelineDetail[13].amount;
unitManganese =
_pet.result.nutrientGuidelineDetail[13].unit.toString();
valZinc = _pet.result.nutrientGuidelineDetail[14].amount;
unitZinc = _pet.result.nutrientGuidelineDetail[14].unit.toString();
valIodine = _pet.result.nutrientGuidelineDetail[15].amount;
unitIodine =
_pet.result.nutrientGuidelineDetail[15].unit.toString();
valSelenium = _pet.result.nutrientGuidelineDetail[16].amount;
unitSelenium =
_pet.result.nutrientGuidelineDetail[16].unit.toString();
valVitaminA = _pet.result.nutrientGuidelineDetail[17].amount;
unitVitaminA =
_pet.result.nutrientGuidelineDetail[17].unit.toString();
valVitaminD = _pet.result.nutrientGuidelineDetail[18].amount;
unitVitaminD =
_pet.result.nutrientGuidelineDetail[18].unit.toString();
valVitaminE = _pet.result.nutrientGuidelineDetail[19].amount;
unitVitaminE =
_pet.result.nutrientGuidelineDetail[19].unit.toString();
valThiaminB1 = _pet.result.nutrientGuidelineDetail[20].amount;
unitThiaminB1 =
_pet.result.nutrientGuidelineDetail[20].unit.toString();
valRiboflavinB2 = _pet.result.nutrientGuidelineDetail[21].amount;
unitRiboflavinB2 =
_pet.result.nutrientGuidelineDetail[21].unit.toString();
valNiacin = _pet.result.nutrientGuidelineDetail[22].amount;
unitNiacin =
_pet.result.nutrientGuidelineDetail[22].unit.toString();
valPantothenic = _pet.result.nutrientGuidelineDetail[23].amount;
unitPantothenic =
_pet.result.nutrientGuidelineDetail[23].unit.toString();
valFolate = _pet.result.nutrientGuidelineDetail[24].amount;
unitFolate =
_pet.result.nutrientGuidelineDetail[24].unit.toString();
valCholine = _pet.result.nutrientGuidelineDetail[25].amount;
unitCholine =
_pet.result.nutrientGuidelineDetail[25].unit.toString();
valVitaminC =
_pet.result.nutrientGuidelineDetail[26].amount.toDouble();
unitVitaminC =
_pet.result.nutrientGuidelineDetail[26].unit.toString();
//
// }
dailyCalVal =
roundDouble(double.parse(_pet.result.totalDailyCalories), 1);
_petImage = _baseUrl + _pet.result.image.thumb.url.toString();
petNameApi = _pet.result.name;
_petName = petNameApi;
// _petAge = petAgeApi;
_petImageView = _petImage;
dataMap.update("Muscle Meat", (value) => _muscleMeatVal);
print("Muscle Meat " + _muscleMeatVal.toString());
dataMap.update("Organ Meat", (value) => _organMeatVal);
dataMap.update("Fruit & Veg", (value) => _fruitNVegVal);
dataMap.update("Bone", (value) => _boneVal);
// });
if(mounted){
// }else{
setState(() {
dataMap.update("Muscle Meat", (value) => _muscleMeatVal);
print("Muscle Meat " + _muscleMeatVal.toString());
dataMap.update("Organ Meat", (value) => _organMeatVal);
dataMap.update("Fruit & Veg", (value) => _fruitNVegVal);
dataMap.update("Bone", (value) => _boneVal);
//
print('-------value sample 1 -------' +
roundDouble(valProtein / (baseProtein * 1.5), 1).toString());
print('-------value sample 2 -------' +
roundDouble(valCrudeFat / (baseCrudeFat * 1.5), 1).toString());
_isData = true;
});
}
} else {
setState(() {
_showAlert = true;
});
// If that call was not successful (response was unexpected), it throw an error.
_showSnackbar('A Network Error Occurred.!', errorNet);
// throw Exception('Failed to load data');
}
}else{
setState(() {
_showAlert = true;
});
// ignore: unnecessary_statements
print('----');
_showSnackbar('A Network Error Occurred.!', errorNet);
throw Exception('Failed to load data');
}
}
void _onTapDown(TapDownDetails details) {
_controller.forward();
}
void _onTapUp(TapUpDetails details) {
_controller.reverse();
}
*** In Build Tree ***
@override
Widget build(BuildContext context) {
...
Widget swapTile() {
return _swapNutrients ? macroCharts : microCharts;
}
Widget _disclaimer() => Container(
width: MediaQuery.of(context).size.width * 0.96,
// height: MediaQuery.of(context).size.height*0.90,
padding: EdgeInsets.symmetric(
horizontal: 12.0,
),
margin: EdgeInsets.symmetric(vertical: 12.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
const Text(
'Calorie Calculator',
style: TextStyle(
fontSize: 24.0,
fontFamily: 'poppins',
color: Colors.black87,
fontWeight: FontWeight.w600),
textAlign: TextAlign.center,
),
SizedBox(height: 24.0),
const Text(
'The calorie calculator results are an estimate only. The condition of your dog is the best indicator of your dog’s energy requirements and must be monitored closely.',
style: TextStyle(
fontSize: 20.0,
fontFamily: 'poppins',
color: Colors.black87,
fontWeight: FontWeight.w500),
textAlign: TextAlign.center,
),
SizedBox(height: 48.0),
GestureDetector(
onTapDown: _onTapDown,
onTapUp: _onTapUp,
child: Transform.scale(
scale: _scale,
child: Container(
child: FlatButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
onPressed: () {
setState(() {
isFirst = true;
// _setIsFirstData();
});
},
padding: EdgeInsets.all(12),
color: Color(0xFF03B898),
child: Container(
width: MediaQuery.of(context).size.width,
child: Text(
'AGREED',
style: kMainHeadingStyleWhite,
textAlign: TextAlign.center,
),
),
),
),
),
)
],
),
);
void rebuildAllChildren(context) {
void rebuild(Element el) {
el.markNeedsBuild();
el.visitChildren(rebuild);
}
(context as Element).visitChildren(rebuild);
}
Widget body(context) {
return Container(
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.symmetric(
horizontal: 8.0,
),
margin: EdgeInsets.symmetric(vertical: 8.0),
child: !_showAlert
? Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
flex: 3,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
alignment: Alignment.center,
width: MediaQuery.of(context).size.width,
child: _isData
? Stack(
children: [
Container(
width: MediaQuery.of(context).size.width / 3,
margin: const EdgeInsets.only(
left: 12.0,
top: 0.0,
),
child: FittedBox(
fit: BoxFit.fitWidth,
child: const Text(
'Food Weight',
style: TextStyle(
// fontSize: 24.0,
fontFamily: 'poppins',
color: Colors.black87,
fontWeight: FontWeight.w600),
textAlign: TextAlign.center,
),
),
),
pieChart,
],
)
: new Center(
widthFactor: 120.0,
heightFactor: 120.0,
child: CircularProgressIndicator(),
),
),
),
Expanded(
flex: 6,
child: Container(
width: MediaQuery.of(context).size.width,
color: Colors.transparent,
child: Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Expanded(
flex: 2,
child: Container(
alignment: Alignment.center,
color: Colors.transparent,
child: userSaveBtn,
),
// ),
// ),
),
Expanded(
flex: 10,
child:
Container(
padding: EdgeInsets.symmetric(vertical: 4.0),
margin: EdgeInsets.only(top: 2.0),
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
// child: Card(
child: _isData
? swapTile()
: new Center(
widthFactor: 120.0,
heightFactor: 120.0,
child: CircularProgressIndicator(),
), //getCustomContainer(), //,//
),
),
// ),
],
),
),
),
// ),
),
],
)
: new Center(
widthFactor: MediaQuery.of(context).size.width * 0.80,
// heightFactor: MediaQuery.of(context).size.height*0.40,
child: Column(
children: [
new FlatButton(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
minWidth: 150.0,
height: 50.0,
color: Colors.white,
colorBrightness: Brightness.light,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(
width: 2.0,
color: Color(0xFF01816B),
),
),
onPressed: () {
// Navigator.of(context).pop();
},
child: new Text(
'Go Back',
style: TextStyle(
color: Color(0xFF01816B),
fontFamily: 'poppins',
fontWeight: FontWeight.w600,
fontSize: 24.0,
),
textAlign: TextAlign.center,
),
),
new FlatButton(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
minWidth: 150.0,
height: 50.0,
color: Colors.white,
colorBrightness: Brightness.light,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(
width: 2.0,
color: Color(0xFF01816B),
),
),
onPressed: () {
setState(() {
_showAlert = false;
});
_fetchData(_petID);
// Navigator.of(context).pop();
},
child: new Text(
'Try Again',
style: TextStyle(
color: Color(0xFF01816B),
fontFamily: 'poppins',
fontWeight: FontWeight.w600,
fontSize: 24.0,
),
textAlign: TextAlign.center,
),
),
],
),
),
);
}
Widget mainBody() {
// rebuildAllChildren(context);
return Container(
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0.5, 1.0],
colors: [
Color(0xFF03B898),
Color(0xFF01816B),
],
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
// SizedBox(height: 32.0),
Expanded(
flex: 1,
child:
petHeader(), //AppHeader(title: "Daily Guide"), //petHeader,
),
Expanded(
flex: 12,
// child: Padding(
// padding: const EdgeInsets.all(0.0),
child: !isFirst ? _disclaimer() : body(context),
// ? _disclaimer() : body(),
// ),
),
// lorem,
],
),
);
}
return SafeArea(
child: Scaffold(
key: _scaffoldedKey,
body: isInternetOn
? mainBody()
: buildAlertDialog(), //_isShowingDialog ? bodyWithDialog : bodyWithCharts
),
);
}
}
// }