首页 > 解决方案 > 在 bloc flutter 中单击列表视图时如何获取列表视图 ID?

问题描述

我已经成功地在列表视图中显示了 API 响应,但是我想在按下列表视图时获得列表视图项的 id。身份证怎么办???

我有如下 API 响应:

"payload": [
{
"id": "402",
"desc": "FAR"
},
{
"id": "406",
"desc": "HGR"
},
{
"id": "403",
"desc": "Baf"
},
]

这是我制作的块:我很困惑如何在单击列表视图项时获取 ID,它是怎么回事???

class ListMultibillBloc {
  final _repository = EresidenceRepository();
  SharedPreferences sPrefs;
  final BehaviorSubject<List<Payload>> _subject = BehaviorSubject<List<Payload>>();

  listMultibill() async{
    try{
      sPrefs = await SharedPreferences.getInstance();

      ListServiceMultibill  responses = await _repository.listServiceMultibill(sPrefs.getString("userid"), sPrefs.getString("password"), sPrefs.getString("imei"),
          sPrefs.getString("coordinate"), sPrefs.getString("bnr"));

      List<Payload> list = responses.data.payload;

      _subject.sink.add(list);

    }catch(e){
      print(e.toString());
      _subject.sink.add(e);
    }
  }

  dispose(){
    _subject.close();
  }

  BehaviorSubject<List<Payload>> get subject => _subject;

}

final listMultibill = ListMultibillBloc();

这是 UI 部分:我可以显示数据列表

class _ListMultibillState extends State<ListMultibill> {

  @override
  void initState() {
    listMultibill.listMultibill();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: StreamBuilder(
          stream: listMultibill.subject,
          builder: (context, AsyncSnapshot<List<Payload>> snapshot) {
            if (snapshot.hasData) {
              print(snapshot.data);
              return buildList(snapshot);
            }else{
              Error();
            }
          },
        ),
      ),
    );
  }

  Widget buildList(AsyncSnapshot<List<Payload>> snapshot) {
    return ListView.builder(
        itemCount: snapshot.data.length,
        itemBuilder: (BuildContext context, int index) {
          return ListTile(
            title: Text(
              snapshot.data[index].desc,
              style: AppTheme.styleSubTitleBlackSmall,
            ),
          );
        }
    );
  }
}

标签: listviewflutterdart

解决方案


您可以onTap在 ListTile 中添加,

onTap:() {
     print("${snapshot.data[index].id}");
},


推荐阅读