应用程序在调试模式下工作,但不在发布模式下工作

时间:2019-04-21 14:34:02

标签: flutter

应用程序的发布模式无法从url获取数据,因此屏幕仅显示“正在加载...”

我正在使用package:http/http.dart包来获取数据。

这是我的State类的样子:

class HomeState extends State<Home>{

      Future<List<Coin>> getCoinList() async {
        var url = '<some_url>';
        var response = await http.get(url);
        var jsonData = json.decode(response.body);
        //iterate through jsonData, create a list and return
      }

      Future<void> updateData() async{
        setState((){});
      }

      @override
      Widget build(BuildContext context) {
        return RefreshIndicator(child: FutureBuilder(
            future: getCoinList(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (snapshot.data == null) {
                return Center(
                  child: Container(
                    child: Text("Loading..."),
                  ),
                );
              } else {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (BuildContext context, int position) {
                      String sign = '-';
                      MaterialColor signColor = Colors.red;
                      if(double.parse(snapshot.data[position].percent_change_1h) > 0.0){
                        sign = '+';
                        signColor = Colors.green;
                      }
                      return Card(
                        child: ListTile(
                          title: Text(snapshot.data[position].name,style: TextStyle(fontWeight: FontWeight.bold),),
                          subtitle: Text(snapshot.data[position].price_usd,style: TextStyle(color: signColor),),
                          trailing: Text(sign+snapshot.data[position].percent_change_1h+"%",style: TextStyle(color: signColor),),
                        ),
                      );
                    });
              }
            }), onRefresh: updateData);
      }
    }

请详细说明代码出了什么问题以及如何解决。谢谢。

1 个答案:

答案 0 :(得分:0)

getCoinList()返回更新的数据,但是实际上您需要使用

来设置状态以使用新数据。
setState () {
coindata = getCoinList();
}

如果不更新状态对象,则不会重建列表。