【发布时间】:2020-03-06 11:21:23
【问题描述】:
我已经能够在 FutureBuilder Widget 中显示来自 API 的 json 数据。但是,小部件具有每个列表的复选框。每当我检查一个列表时,都会检查整个列表。
我需要有关如何单独检查每个列表并能够使用所选列表的数据的帮助。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Location extends StatefulWidget {
@override
_LocationState createState() => _LocationState();
}
class _LocationState extends State<Location> {
//initState
bool selected = false;
Future<List<User>> _getUsers() async {
var data = await http
.get("http://www.json-generator.com/api/json/get/cdjVKlMEde?indent=2");
var jsonData = json.decode(data.body);
List<User> users = [];
for (var u in jsonData) {
User user =
User(u["index"], u["about"], u["name"], u["email"], u["picture"]);
users.add(user);
}
print(users.length);
return users;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Select City'),
),
body: Container(
child: FutureBuilder(
future: _getUsers(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
print(snapshot.data);
if (snapshot.data == null) {
return Container(child: Center(child: Text("Loading...")));
} else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
leading: CircleAvatar(
backgroundImage:
NetworkImage(snapshot.data[index].picture),
),
title: Text(snapshot.data[index].name),
subtitle: Text(snapshot.data[index].email),
trailing: Checkbox(
value: selected,
onChanged: (bool val) {
setState(() {
selected = val;
});
}),
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) =>
DetailPage(snapshot.data[index])));
},
);
},
);
}
},
),
),
);
}
}
class DetailPage extends StatelessWidget {
final User user;
DetailPage(this.user);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(user.name),
));
}
}
class User {
final int index;
final String about;
final String name;
final String email;
final String picture;
User(this.index, this.about, this.name, this.email, this.picture);
}
我需要有关如何单独检查每个列表并能够使用所选列表的数据的帮助。
【问题讨论】: