如何使用API​​响应中的值更新参数的值?

时间:2019-06-24 13:08:49

标签: flutter dart

我正在尝试使用来自API响应的值更新totalPrice的值。我创建了一个包含currentTotal的{​​{1}}方法。然后将setState()的值传递给snapshot.data.price.totalAmount以更新totalPrice的值。但是,它不会更新该值。你能帮忙吗?

currentTotal

1 个答案:

答案 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'];
  }
}