我正在尝试使用来自API响应的值更新totalPrice
的值。我创建了一个包含currentTotal
的{{1}}方法。然后将setState()
的值传递给snapshot.data.price.totalAmount
以更新totalPrice的值。但是,它不会更新该值。你能帮忙吗?
currentTotal
答案 0 :(得分:0)
您的构建中需要修复很多事情。
1-您的小部件为StatefulWidget
,要在FutureBuilder
中使用StatefulWidget
,请阅读以下内容:
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
简而言之,请创建Future future;
实例字段,然后在initState中分配它,并将该未来字段用于FutureBuilder
。
2-您的setState
不在方法内,您那里可能有语法错误。创建一个void方法并在其中使用setState。
3-您不需要像这样检查两次:
if (snapshot.hasData) {
if (snapshot.data != null) {
其中之一足够,在条件检查之后,调用包含setState
的方法,然后显示它。
编辑:
以下是您的解决方案的示例模板:
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
Future<int> future;
int price = 0;
@override
void initState() {
future = fetchPrice();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: FutureBuilder<int>(
future: future,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Center(
child: Text(price.toString()),
);
}
return Center(child: CircularProgressIndicator());
},
),
),
);
}
Future<int> fetchPrice() async {
final response =
await http.get('https://jsonplaceholder.typicode.com/posts/1');
final data = json.decode(response.body);
setState(() {
price = data['userId'];
});
return data['userId'];
}
}