Listview 颤振FutureBuilder小部件动态列表长度

Listview 颤振FutureBuilder小部件动态列表长度,listview,flutter,builder,Listview,Flutter,Builder,我试图在FutureBuilder小部件中创建DynamicListView.builder,但无法获取来自AsyncSnapshot快照的列表长度。我尝试了itemCount:snapshot.data.lenght,但没有成功。这是我的密码 class FlutterDemo extends StatelessWidget { final QuoteStorage storage; FlutterDemo({Key key, @required this.storage}) : s

我试图在FutureBuilder小部件中创建DynamicListView.builder,但无法获取来自AsyncSnapshot快照的列表长度。我尝试了itemCount:snapshot.data.lenght,但没有成功。这是我的密码

class FlutterDemo extends StatelessWidget {
  final QuoteStorage storage;

  FlutterDemo({Key key, @required this.storage}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Scrapy on flutter')),
      body: Center(
        child: FutureBuilder(
            future: storage.getQuotes(),
            builder: (context, AsyncSnapshot<Quotes> snapshot) {
              return snapshot.hasData ? ListView.builder(
                itemCount: snapshot.data.lenght,
                itemBuilder: (context, index) {
                  final quotes = snapshot.data;
                  return Card(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(quotes.items[index].quote),
                      ));
                },
              )
                  : const CircularProgressIndicator();
            }),
      ),
    );
  }
}
数据来自类引号:

class Quotes extends Items {
  @override
  final List<Quote> items;
  Quotes({
    this.items,
  });

  factory Quotes.fromJson(String str) => Quotes.fromMap(json.decode(str));
  factory Quotes.fromMap(Map<String, dynamic> json) => Quotes(
        items: json["items"] == null
            ? null
            : List<Quote>.from(json["items"].map((x) => Quote.fromMap(x))),
      );
}
并引用用于构建未来的存储类:

class QuoteStorage {
  // ...
  // ...
  Future<Quotes> getQuotes() async {
    final file = await _localFile;
    final contents = await file.readAsString();
    return Quotes.fromJson(contents);
  }
}
若我不提供itemCount(从url动态获取),应用程序将崩溃。
有什么想法吗?

因为你拼错了长度,所以出现了错误

您可以通过更正长度的拼写来解决此问题。 用下面的代码替换您的演示类

它工作得非常好

class FlutterDemo extends StatelessWidget {
  final QuoteStorage storage;

  FlutterDemo({Key key, @required this.storage}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Scrapy on flutter')),
      body: Center(
        child: FutureBuilder(
            future: storage.getQuotes(),
            builder: (context, AsyncSnapshot<Quotes> snapshot) {
              return snapshot.hasData ? ListView.builder(
                // current the spelling of length here
                itemCount: snapshot.data.length,
                itemBuilder: (context, index) {
                  final quotes = snapshot.data;
                  return Card(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(quotes.items[index].quote),
                      ));
                },
              )
                  : const CircularProgressIndicator();
            }),
      ),
    );
  }
}

我希望这能有所帮助。

感谢您在这里指出,我已经发现需要使用itemCount:snapshot.data.items.length,因为items是我可以从中获取计数的列表。