- 此问题在此处已有答案**:
What is a Future and how do I use it?(6个答案)
两年前关闭了。
我正在尝试解析flutter中的api。异步请求延迟了进度指示器显示的响应。但是进度指示器在获取响应后并没有消失。它仍然在屏幕上。
如何改变状态的进程加载程序到listview.builder当响应被提取?
这是我的准则。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'users.dart';
import 'package:http/http.dart' as http;
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool isLoading = false;
List<Users> _users;
Future<List<Users>> getUsers() async {
var response = await http.get(Uri.encodeFull('http://jsonplaceholder.typicode.com/users'));
_users = usersFromJson(response.body);
isLoading = true;
}
@override
void initState() {
setState(() {
getUsers();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(isLoading ? "Parsed Json" : "Loading..."),
backgroundColor: Colors.deepPurple,
),
body: isLoading ? ListView.builder(
itemCount: _users.length,
itemBuilder: (BuildContext context,int index){
return ListTile(
leading: Image.network('https://images.unsplash.com/photo-1488426862026-3ee34a7d66df?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=334&q=80'),
title: Text(_users[index].name),
);
}) : Center(child: CircularProgressIndicator()),
);
}
}
3条答案
按热度按时间ldfqzlk81#
工作代码,试试这个
bmvo0sr52#
选中您的
_user != null
而不是bool
,否则显示列表指示符qyyhg6bp3#
**void initState()**方法当这个对象被插入到树中时调用。框架将为它创建的每个State对象调用这个方法一次。所以在initState()方法中不需要setState。
尝试在响应后设置setState,因此