我的listview的复选框充满数据,当我选择选项时,它将选中该项目。 Listview是多重选择选项。有用于将jsonresponse转换为数据的模型类。 UI代码可以正常工作,但是执行不当会导致应用程序中的错误。 选中水龙头项目时,选中该复选框并自发重置。问题是要选中自动重置的所有项目上的复选框。模型类看起来好像有问题。在模拟器以及物理设备上面临的问题。 感谢您的时间。
这是我的CommonResponse类
class CommonResponse {
final String id;
final String name;
bool isSelected = false;
CommonResponse({this.id, this.name});
factory CommonResponse.fromJson(Map<String, dynamic> json) {
return CommonResponse(
id: json['id'],
name: json['name'] as String,
);
}
}
这是用户界面代码:
import 'dart:convert';
import 'package:flutter/material.dart';
class WorkList extends StatefulWidget {
Key key;
WorkList({this.key}) : super(key: key);
@override
_WorkListState createState() => _WorkListState();
}
class _WorkListState extends State<WorkList> {
Constants constants = Constants();
List<String> selectedPrefIdList = List();
Future<List<CommonResponse>> _getList() async {
var jsonData =
'[{"id": "1", "name": "1-2 day"}, {"id": "2", "name": "cameo"}, {"id": "5", "name": "movies"}, {"id": "6", "name": "ads"}]';
List jsonResponse = json.decode(jsonData);
var workPrefOutput =
jsonResponse.map((list) => CommonResponse.fromJson(list)).toList();
return workPrefOutput;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
child: FutureBuilder<List<CommonResponse>>(
future: _getList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.separated(
separatorBuilder: (context, index) {
return Divider();
},
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return CheckboxListTile(
title: Text(snapshot.data[index].name),
controlAffinity: ListTileControlAffinity.platform,
value: snapshot.data[index].isSelected,
onChanged: (value) {
setState(() {
snapshot.data[index].isSelected = value;
var selectedId = snapshot.data[index].id;
selectedPrefIdList.contains(selectedId)
? selectedPrefIdList.remove(selectedId)
: selectedPrefIdList.add(selectedId);
// print(selectedPrefIdList);
});
},
);
});
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
),
),
);
}
}
答案 0 :(得分:0)
我猜setstate正在产生问题。它正在重新加载将来的构建器。 因此,您的选择正在重置
答案 1 :(得分:-1)
我不确定这是否行得通,但是也许您可以尝试将其切换
f <- function() {
rstudioapi::sendToConsole("1")
menu(c("yes", "no"))
}
f()
#> 1: yes
#> 2: no
#>
#> Selection: 1
#> [1] 1
对此
snapshot.data[index].isSelected = value;