[英]Flutter FutureBuilder inside another FutureBuilder, Taken From JSON array of Strings
[英]How do I create a Flutter Futurebuilder function that displays an array of Strings taken from JSON?
我在Flutter中有一個項目管理應用程序,並將這些項目排列在列表視圖中。 我從JSON中的API獲取數據,並希望顯示正在處理項目的用戶!
JSON:
{
"id": 81,
"users": [
{
"username": "hugo",
"fullname": "Hugo Johnsson"
},
{
"username": "studentone",
"fullname": "Student One"
}
],
"title": "test med teacher chat",
"description": "This project does not have a description.",
"subject": "No subject",
"deadline": "2019-01-06",
"days_left": "107 days ago",
"overview_requests": [
{
"id": 28,
"user": {
"username": "hugo",
"fullname": "Hugo Johnsson"
},
"group": 81
}
]
}
Flutter里面的類:
class Project {
final int id;
final String title;
final String description;
final String deadline;
final String subject;
final String days_left;
final List<USER> users;
Project(
this.id,
this.title,
this.description,
this.deadline,
this.subject,
this.days_left,
this.users
);
}
class USER {
final String username;
final String fullname;
USER(
this.username,
this.fullname
);
}
未來(在Futurebuilder中使用):
Future<List<Project>> _getProjects() async {
var data = await http.get(--ADRESS--);
var jsonData = json.decode(data.body); //an array of json objects
List<Project> allProjects = [];
for (var JData in jsonData) {
Project project = Project(
JData["id"],
JData["title"],
JData["description"],
JData["deadline"],
JData["subject"],
JData["days_left"],
JData[USER("username", "fullname")]
allProjects.add(project);
}
return allProjects;
}
UI存在一個返回listview.builder的futurebuilder。 未來是上面的函數,我想在另一個listview中的另一個listview中顯示用戶名。
所以這就是我想要它的樣子,區別在於Circle Avatars中的Text應該是用戶名的第一個字母
我怎么取出字符串?
Text(snapshot.data[index].users.username
Widget build(BuildContext context) {
return FutureBuilder(
future: _getProjects(),
builder: (context, snapshot) => ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) => ListView.builder(
itemCount: snapshot.data[index].users.length,
itemBuilder: (context, userIndex) => Text(snapshot.data[index].users[userIndex].username[0]),
),
),
);
}
Future<List<Project>> _getProjects() async {
var data = await http.get(--ADRESS--);
var jsonData = json.decode(data.body); //an array of json objects
List<Project> allProjects = [];
for (var JData in jsonData) {
List<USER> users = JData["users"] == null
? []
: JData["users"]
.map( (userJson) => USER("username", "fullname") ) // new code
Project project = Project(
JData["id"],
JData["title"],
JData["description"],
JData["deadline"],
JData["subject"],
JData["days_left"],
users,
);
allProjects.add(project);
}
return allProjects;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.