gpt4 book ai didi

dart - CheckboxListTile 在使用来自 firebase 的实时数据库时不起作用

转载 作者:IT王子 更新时间:2023-10-29 07:05:22 25 4
gpt4 key购买 nike

我正在尝试使用 StreamBuilder 从在线服务器 Firebase 创建数据列表,但该复选框不会被选中。

我已使用 StreamBuilder 获取数据并使用 LisTile 小部件构建列表项,但 checkboxtilelist 小部件在定义 setState() 函数后将无法工作。 buildBody 定义在 build Widget 类下。

Widget buildBody(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('hisab').snapshots(),
builder: (context, snapshots) {
if (!snapshots.hasData) {
return LinearProgressIndicator();
}
return _buildList(context, snapshots.data.documents);
}
);
}

Widget _buildList(BuildContext context, List<DocumentSnapshot> snapshot) {
return ListView(
padding: EdgeInsets.only(top: 20.0),
children: snapshot.map((data) => _buildListitem(context, data)).toList(),
);
}

Widget _buildListitem(BuildContext context, DocumentSnapshot data) {
final record = Record.fromSnapshot((data));
bool _values = false;
void _onChanged(bool newValue) {
setState(() {
_values = newValue;
});
}

return Padding(
padding: EdgeInsets.symmetric(horizontal: 18.0, vertical: 9.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.white),
borderRadius: BorderRadius.circular(5.0),
),
child: new ListTile(
onTap: () {
_onChanged(!_values);
},
leading: CircleAvatar(child: Text(record.name[0])),
title: new Column(
children: <Widget>[
new CheckboxListTile(
title: Text(record.name),
value: _values,
onChanged: _onChanged,
)
],
),
),
),
);
}

最佳答案

创建新的有状态小部件类是个好主意:

class CustomListItemWidget extends StatefulWidget {
CustomListItemWidget({Key key, @required this.record}) : super(key: key);

final record;

@override
State createState() => _CustomListItemWidgetState();
}

class _CustomListItemWidgetState extends State<CustomListItemWidget> {

bool _values = false;
void _onChanged(bool newValue) {
setState(() {
_values = newValue;
});
}

@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 18.0, vertical: 9.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.white),
borderRadius: BorderRadius.circular(5.0),
),
child: new ListTile(
onTap: () {
_onChanged(!_values);
},
leading: CircleAvatar(child: Text(widget.record.name[0])),
title: new Column(
children: <Widget>[
new CheckboxListTile(
title: Text(widget.record.name[0]),
value: _values,
onChanged: _onChanged,
)
],
),
),
),
);
}
}

接下来,您可以从方法 _buildListitem 传递值:

Widget _buildListitem(BuildContext context, DocumentSnapshot data) {
return CustomListItemWidget(
record: Record.fromSnapshot((data)),
);
}

关于dart - CheckboxListTile 在使用来自 firebase 的实时数据库时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53912453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com