You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中ListView填充动态数据无显示问题排查求助

问题原因
  • 你在build方法中生成的100条模拟数据只保存在局部变量items里,但ListView.builder的itemCount绑定的是全局空列表vehicles的长度,初始时vehicles没有元素,长度为0,所以不会渲染任何列表项
  • 代码中同时混用了两个数据源:ExpansionTile的标题读取自vehicles[i],展开内容又读取自items[i],逻辑存在冲突
修复方法

推荐直接使用局部生成的items作为唯一数据源,修改对应参数即可,修复后的完整代码如下:

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      home: MyApp(),
      debugShowCheckedModeBanner: false,
    ));

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    final items = List<Vehicle>.generate(100,
        (i) => i % 6 == 0 ? Vehicle('qqq', ['111', '222']) : Vehicle('sss', ['333', '444']));

    return Scaffold(
      body: ListView.builder(
        // 替换为items的长度
        itemCount: items.length,
        itemBuilder: (context, i) {
          return ExpansionTile(
            // 替换为从items取数据
            title: Text(
              items[i].title,
              style: TextStyle(
                  fontSize: 20.0,
                  fontWeight: FontWeight.bold,
                  fontStyle: FontStyle.italic),
            ),
            children: <Widget>[
              Column(
                  mainAxisAlignment: MainAxisAlignment.end,
                  crossAxisAlignment: CrossAxisAlignment.end,
                  children: _buildExpandableContent(items[i])),
            ],
          );
        },
      ),
    );
  }

  _buildExpandableContent(Vehicle vehicle) {
    List<Widget> columnContent = [];

    for (String content in vehicle.contents) {
      columnContent.add(
        ListTile(
          title: Text(
            content,
            style: TextStyle(fontSize: 18.0),
          ),
        ),
      );
    }
    return columnContent;
  }
}

class Vehicle {
  final String title;
  List<String> contents = [];

  Vehicle(this.title, this.contents);
}

额外优化建议

如果后续需要对列表做增删改操作,建议把items变量移到_MyAppState类的成员位置,不要放在build方法内,避免页面每次重绘都重复生成列表数据。原代码中全局定义的空vehicles列表没有用到,可以直接删除。

内容的提问来源于stack exchange,提问作者Aquarius_Girl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:48:03