当前位置: 首页 > 知识库问答 >
问题:

Flutter FutureBuilder小部件动态列表长度

杨波娃
2023-03-14

我试图在FutureBuilder小部件中创建动态ListView.builder,但无法获得来自异步快照的列表长度。我已经尝试了< code > item count:snapshot . data . length ,但它不起作用。这是我的代码

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);
  }
}

如果我不提供动态的项目计数(从URL获取),应用程序正在崩溃。有什么想法吗?

共有1个答案

郑茂勋
2023-03-14

您收到错误,因为您拼写长度错误。

您可以通过更正长度的拼写来修复此问题。用下面的代码替换您的<code>flatterdemo

它工作得很好。

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();
            }),
      ),
    );
  }
}

我希望这有帮助。

 类似资料:
  • 我正在创建一个测验应用程序,需要根据特定问题的选项数量动态显示mcq选项。 例如: 现在按钮的代码如下: 如你所见,我能做的就是“修复”2个按钮。有没有一种方法可以根据特定问题的选项数量动态添加按钮? 我有一个名为

  • 问题内容: 我的UL清单很长,我需要分解成较小的清单,每个清单包含约20个项目。 我以为我可以使用类似 但事实并非如此。知道如何以最少的CPU使用jQuery吗? 问题答案: 我将使用删除的s 创建文档片段,然后将其重新添加到所需的位置。在这种情况下,我将它们重新附加到主体上:

  • 我很熟悉flutter中的无状态和有状态小部件,但我很好奇为什么我们不将有状态小部件定义为无状态小部件?为什么我们需要声明两个不同的类,一个用于createstate方法,一个用于实际的状态实现?

  • 我想生成jasper报表,用于打印在固定大小的文具上。我创建了html表,并将所有的值放在其中,根据我的要求,现在我想通过Java打印,所以我现在使用了jasper报告,因为我有列,是变化的时间。根据我的要求,我在网上搜索,我得到了动态的jasper是解决方案,但由于方法添加列需要列名和传递变量,这是从setter getter方法,但我的整个列是动态的,那么我如何生成setter getter方

  • 我是一个新手,我想建立动态地图 最终地图检查={'卧房':'床','浴室':'bathbub\u轮廓'}; 它显示一个错误 lib/模板/general.dart:164: 18:错误:无法从返回类型为MapEntry的函数返回类型为Row的值 “行”来自“包:flatter/src/widgets/basic”。dart’(“../flight/packages/flight/lib/src/w