这是Flutter中的一个小POC,我的build()函数被一次又一次地调用。
没有任何循环就没有预料到这一点,经过大量的研究,我也在initState()中调用了“Future”。
但仍面临同样的问题。
提前谢谢你的时间!
我试过了什么..
import 'package:flutter/material.dart';
//http_request
import 'package:http/http.dart' as http; //to handle the http request
// import 'dart:async'; // for async functions
import 'dart:async' show Future;
import 'dart:convert'; //to convert the http response in JSON formate
import 'HomePage.dart';
class Reports extends StatefulWidget {
@override
_Reports createState() => _Reports();
}
class _Reports extends State<Reports> {
static String url = "Some Url";
String _response = "abc";
@override
void initState() {
super.initState();
getTradeName_dropdown_ITR_Computation_DATA();
}
@override
Widget build(BuildContext context) {
print('body');
return Scaffold(
body: Container(
child: new Text(_response),
),
);
}
Future getTradeName_dropdown_ITR_Computation_DATA() async {
try {
http.Response response =
await http.get("http://" + url );
if (this.mounted) {
setState(() {
String jsonTradeName_dropdown = response.body;
_response = jsonTradeName_dropdown;
});
}
} on Exception {
setState(() {
_response = "Some error occored. Please Try again...";
});
}
}
}
输出:
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
理解build()的正确模型是你应该想象它每秒被调用60次。所以你的build()例程应该是快速且幂等的。
在实践中,框架进行了优化,以便除非在需要时不调用它,但是您不应该将对build()的过多调用视为失败。
你犯了几个错误,这是正确的代码。您应该使用String
而不是Text
小部件来显示响应。
class _Reports extends State<Reports> {
static String url = "url";
String _response = "abc";
@override
void initState() {
super.initState();
getTradeName_dropdown_ITR_Computation_DATA();
}
@override
Widget build(BuildContext context) {
print('body');
return Scaffold(
body: Container(
child: new Text(_response),
),
);
}
Future getTradeName_dropdown_ITR_Computation_DATA() async {
try {
http.Response response =
await http.get("url_goes_here");
if (this.mounted) {
setState(() {
String jsonTradeName_dropdown = response.body;
_response = jsonTradeName_dropdown;
});
}
} on Exception {
setState(() {
_response = "Some error occored. Please Try again...";
});
}
}
}