繁体   English   中英

for 循环仅返回 ListView.builder 内的 List 的第一个元素,但它适用于构建小部件

[英]for loop only return first element of List inside ListView.builder but it works for in build Widget

我有一个在 Build 下的列表,它适用于 ListView.builder 之外,但 ListView.builder 内部的循环只会返回第一个元素,为什么? 感谢您的建议!

  Widget build(BuildContext context) {
    List eventList = [
      TimelineModel(              
          eventTitle: 'first',),
      TimelineModel(              
          eventTitle: 'second'),
    ];    
    return GetBuilder<TimelineController>(builder: (controller) {
          for(var e in eventList){
            print('???${e.eventTitle}'); // here loops work
          }
          return Scaffold(          
            body: Container(              
              child: Stack(
                children: [                
                  ListView.builder(            
                    itemBuilder: (context, index) {
                      for (var event in eventList) 
                          print('------${event.eventTitle}------'); // here loop will only return first element                       
                  ),                  
                ],
              ),
            ),
          );
        }
    );

您可能想像这样使用它:

ListView.builder(
    itemCount: eventList.length,
    itemBuilder: (context, index) {
      print('------${eventList[index].eventTitle}------');
      return Text(eventList[index].eventTitle);
    }
),

ListView.builder()中添加itemCount

Widget build(BuildContext context) {
    List eventList = [
      TimelineModel(              
          eventTitle: 'first',),
      TimelineModel(              
          eventTitle: 'second'),
    ];    
    return GetBuilder<TimelineController>(builder: (controller) {
          for(var e in eventList){
            print('???${e.eventTitle}'); // here loops work
          }
          return Scaffold(          
            body: Container(              
              child: Stack(
                children: [                
                  ListView.builder( 
                    itemCount: eventList.length,            
                    itemBuilder: (context, index) {
                      for (var event in eventList) 
                          print('------${event.eventTitle}------'); // here loop will only return first element                       
                  ),                  
                ],
              ),
            ),
          );
        }
    );

试试下面的代码:

ListView.builder(
  itemCount: eventList.length,
  itemBuilder: (context, index) {
    final event = eventList[index];

    print('------${event.eventTitle}------');
    return Text(event.eventTitle);
  },
),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM