【问题标题】:Invalid value: Only valid value is 0: 1 - Flutter无效值:只有有效值是 0:1 - Flutter
【发布时间】:2020-05-27 16:00:13
【问题描述】:

我正在尝试构建一个列表,其中每个项目在远端都包含一个图标。但是,当我在添加多个项目时尝试访问列表时出现错误: Invalid value: Only valid value is 0: 1

代码如下:

import 'package:flutter/material.dart';
import './images.dart';

class LikedList extends StatefulWidget {
  @override
  _LikedListState createState() => _LikedListState();
}

class _LikedListState extends State<LikedList> {
  static List<bool> _likes = List.filled(ImagesState.likes.length,true);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Liked List'),
      ),
      body: ListView.separated(
        separatorBuilder: (context, index) => Divider(),
        itemCount: ImagesState.likes.length,
        itemBuilder: (context, index) {
          final item = ImagesState.likes[index];
          return ListTile(
            title: Text(item),
            trailing: IconButton(
              icon: _likes[index]
                  ? Icon(
                      Icons.favorite_border,
                      color: Colors.grey,
                    )
                  : Icon(
                      Icons.favorite,
                      color: Colors.red,
                    ),
              onPressed: () {
                setState(() {
                  print(_likes);
                  _likes[index] = !_likes[index];
                  print(_likes);
                });
              },
            ),
            onLongPress: () {
              setState(() {
                print(ImagesState.likes[index]);
                ImagesState.likes.removeAt(index);
              });
            },
          );
        },
      ),
    );
  }
}

有人知道为什么会这样吗? 类似的建议指向 itemCount 未设置,但我正在使用它。

【问题讨论】:

  • 当你面对这个时?你正在执行什么操作
  • ImagesState.likes 中有什么内容?可能您可以将itemCount 的值设置为等于_likes.length
  • @Purvik Rana 如果我将其设置为_likes.length,则在第一次访问列表后,即使添加了更多项目,它们也不会显示在列表中。 ImagesState.likes 在另一个文件中,是一个 5 项的固定数组。
  • @jitsm555:这是错误:i.stack.imgur.com/RXKfx.gif
  • 我刚刚检查了你的 gif。这是与您正在访问的列表相关的范围错误。请检查一次您添加项目的位置,以及添加项目后您的列表是否确实有它。

标签: flutter dart flutter-layout


【解决方案1】:

您似乎正在使用以下语句创建一个固定长度的列表:

static List<bool> _likes = List.filled(ImagesState.likes.length,true);

这将创建一个长度为 .likes.length 的填充固定长度列表,其中包含值“true”。 您需要在方法调用中添加第三个参数“growable: true”才能添加到列表中。

【讨论】:

  • 感谢回复,我添加了'growable':static List&lt;bool&gt; _likes = List.filled(ImagesState.likes.length,true, growable: true); 但我仍然遇到同样的错误。
  • 请显示发生错误的代码行。
  • 这里是堆栈跟踪:When the exception was thrown, this was the stack: #0 List.[] (dart:core-patch/growable_array.dart:146:60) #1 _LikedListState.build.&lt;anonymous closure&gt; (package:sosam/likedlist.dart:26:27) #2 new ListView.separated.&lt;anonymous closure&gt; (package:flutter/src/widgets/scroll_view.dart:1083:34) #3 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:446:22) #4 SliverMultiBoxAdaptorElement._build.&lt;anonymous closure&gt; (package:flutter/src/widgets/sliver.dart:1134:67) 第 26 行:icon: _likes[index]
  • 我只能建议您设置一些断点并检查将要执行的索引以及 ImagesState.likes.length 的实际长度。
猜你喜欢
  • 2020-08-04
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2020-11-01
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多