当在bloc Flatter中单击listview时,如何获取listview id?

当在bloc Flatter中单击listview时,如何获取listview id?,listview,flutter,dart,Listview,Flutter,Dart,我已经成功地在listview中显示了API响应,但是我希望当按下listview时,我可以获得listview项的id。我怎么才能拿到身份证 我有如下API响应: "payload": [ { "id": "402", "desc": "FAR" }, { "id": "406", "desc": "HGR" }, { "id": "403", "desc": "Baf" }, ] 这是我建立的集团: 当单击listview项目时,我不知道如何获取ID,它是如何获得的 class ListM

我已经成功地在listview中显示了API响应,但是我希望当按下listview时,我可以获得listview项的id。我怎么才能拿到身份证

我有如下API响应:

"payload": [
{
"id": "402",
"desc": "FAR"
},
{
"id": "406",
"desc": "HGR"
},
{
"id": "403",
"desc": "Baf"
},
]
这是我建立的集团: 当单击listview项目时,我不知道如何获取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();

class ListMultibillBloc{
最终_repository=EresidenceRepository();
共享引用SPref;
最终行为主体_subject=行为主体();
listMultibill()异步{
试一试{
sPrefs=等待SharedReferences.getInstance();
ListServiceMultibill responses=Wait _repository.ListServiceMultibill(sPrefs.getString(“用户ID”)、sPrefs.getString(“密码”)、sPrefs.getString(“imei”),
sPrefs.getString(“坐标”)、sPrefs.getString(“bnr”);
列表=responses.data.payload;
_subject.sink.add(列表);
}捕获(e){
打印(如toString());
_主题。水槽。添加(e);
}
}
处置{
_subject.close();
}
行为主体get subject=>\u subject;
}
最终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,
            ),
          );
        }
    );
  }
}
class\u ListMultibillState扩展状态{
@凌驾
void initState(){
listMultibill.listMultibill();
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:StreamBuilder(
流:listmultible.subject,
生成器:(上下文,异步快照){
if(snapshot.hasData){
打印(快照数据);
返回构建列表(快照);
}否则{
错误();
}
},
),
),
);
}
小部件构建列表(异步快照快照){
返回ListView.builder(
itemCount:snapshot.data.length,
itemBuilder:(构建上下文,int索引){
返回列表块(
标题:正文(
snapshot.data[index].desc,
样式:AppTheme.stylesSmall,
),
);
}
);
}
}

您可以在ListTile中添加
onTap

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


您可以在ListTile中添加
onTap

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


我不能完全肯定我是否正确理解了这个问题。。但是你不是已经解决了这个问题吗?如果您有权访问snapshot.data[index].desc,那么您也可以访问snapshot.data[index].id。不完全确定我是否正确理解了这个问题。。但是你不是已经解决了这个问题吗?如果您有权访问snapshot.data[index].desc,则还可以访问snapshot.data[index].id。