- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过一整天的努力解决这个问题后,我不得不来寻求帮助。
我正在尝试构建此ListView.builder,它具有固定数量的itemCount。并使用从本地存储的JSON文件检索的数据构建其Widget。
我正在使用提供程序来传递该数据。问题是,在应用启动或热重启时,ListView.builder变成红色并显示错误,然后在四分之一秒后显示我的数据。
我知道为什么会这样,我从json获取的数据列表最初是空的。因此,我将三元运算符设为:provider.data == null ? CircularProgressIndicator() : ListView.builder...
,但这并不能阻止其崩溃。
我不知道为什么,这让我发疯。这是完整的代码:
我们在这里谈论的是名为“推荐卡片列表”的窗口小部件,它通过使用随机数(在列表长度范围内)作为索引来显示上述列表中的窗口小部件。
我在HomeScreen上有一个名为CategoryCardList的类似ListView,它的工作方式与RecommendationdCardList相似,但是我没有这个问题。主屏幕的其余部分也显示良好,只有RecommendedCardList的部分在短时间内变成红色。
主屏幕类别:
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Get user's screen properties
// We are using this properties to adjust size accordingly
// In order to achieve maximum responsivnes for different screen sizes
var height = MediaQuery.of(context).size.height;
var width = MediaQuery.of(context).size.width;
var repoProvider = Provider.of<Repository>(context);
var recipeDataList = repoProvider.recipeDataList;
return Container(
color: backgroundColor,
child: repoProvider.recipeDataList == null
? Center(child: CircularProgressIndicator())
: Padding(
padding: contentPadding,
child: ListView(
children: <Widget>[
AppTitle(),
SizedBox(
height: height * 0.03,
),
Column(
children: <Widget>[
CategoryAndSeeAll(),
CategoryCardsList(height: height, provider: repoProvider),
],
),
SizedBox(
height: height * 0.05,
),
Container(
width: double.infinity,
height: height * 0.1,
decoration: BoxDecoration(
border: Border.all(color: accentColor),
),
child: Text(
'Reserved for AD',
textAlign: TextAlign.center,
),
),
SizedBox(
height: height * 0.05,
),
RecommendedCardsList(height: height, width: width, recipeDataList: recipeDataList),
],
),
),
);
}
}
class RecommendedCardsList extends StatelessWidget {
const RecommendedCardsList({
Key key,
@required this.height,
@required this.width,
@required this.recipeDataList,
}) : super(key: key);
final double height;
final double width;
final recipeDataList;
@override
Widget build(BuildContext context) {
return Container(
height: height * 0.30,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: numberOfRecommendedRecipes,
itemBuilder: (context, counter) {
int randomNumber = Random().nextInt(recipeDataList.length);
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
RecommendedCard(
width: width,
height: height,
imagePath: recipeDataList.elementAt(randomNumber).image,
text: recipeDataList.elementAt(randomNumber).title,
),
],
);
}),
);
}
}
class Repository extends ChangeNotifier {
Repository() {
loadJson();
}
var _recipeData;
List<RecipeModel> _recipeDataList = [];
List<RecipeModel> get recipeDataList => _recipeDataList;
void loadJson() async {
var json = await rootBundle.loadString('assets/recipes.json');
var parsedJson = jsonDecode(json);
for (var item in parsedJson) {
_recipeData = RecipeModel.fromJson(item);
_recipeDataList.add(_recipeData);
}
//print('Title:${_recipeDataList[0].title}\nImage:${_recipeDataList[0].image}'); // For debugging
notifyListeners();
}
}
最佳答案
此错误与以下事实有关:代码在列表中搜索了索引,并且此索引大于列表长度。
我认为错误在于该部分:
int randomNumber = Random().nextInt(recipeDataList.length);
// changing ternary logic
(repoProvider.recipeDataList == null && repoProvider.recipeDataList.length > 0)
// inside ListView.Builder change to get the list length
itemCount: recipeDataList.length
关于flutter - RangeError(索引):无效值:有效值范围为空:1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62182729/
我已经读了差不多有关此错误的文章,但是常见的答案是“使用FutureBuilder”或“使用isEmpty?”。我已经尝试了两种解决方案,但是仍然出现错误。提前致谢。 import 'package:
我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 谁有想法? http://plnkr.co/edit/aNcBcU?p=preview 检查Chrome中的调试控制台(例如),您
我的 JS 代码运行得很好,直到我添加了以下函数: $(".meassure-combo").change(function() { switch ($(this).attr("name"))
我有 HTML: Upload 还有 jQuery/JavaScript: $('.js-uploader').click(function(){ $(this).fi
我正在尝试下载大型 json 数据。但它会导致Uncaught RangeError: Invalid string length。 请帮忙解决这个问题,先谢谢了。 这是 Jsfiddle:http:
smallestInteger = (stack,numbers,k) => { if (stack.length == 0){ stack.push(numbers[k]);
我在nodejs中使用sequelize和mysql。我正在尝试运行命令 npx sequelize db:create 但它给了我这个错误。不知道在这里做什么。任何帮助表示赞赏。谢谢你。 Seque
我收到以下错误 W20141210-18:14:54.394(5.5)? (STDERR) W20141210-18:14:54.395(5.5)? (STDERR) /Users/removed/.
我是 Meteor 的新手。我正在做简单的应用程序。这是我遇到的问题: Template.newFeedForm.events({ 'submit #new-feed-form'(event)
我是 Meteor 的新手。我正在做简单的应用程序。这是我遇到的问题: Template.newFeedForm.events({ 'submit #new-feed-form'(event)
我有一个更改事件,当选择框更改时会触发该事件。然而,选择框位于被替换的 div 内,因此会重新生成选择框。由于此错误可能是由于无限循环造成的,因此我猜测创建选择框时也必须触发我的触发事件。我尝试了很多
我有一个表格,我必须从中获取我的数据。我正在使用 ejs 模板。我的“/”路由呈现“主” View ,我有一个中间件来处理来自表单的数据,但它返回错误“RangeError:超出最大调用堆栈大小” 我
当运行以下代码时: (function recur() { recur() })() 出现以下错误 - Uncaught RangeError: Maximum call stack size
我有一个正在实现一些自定义验证的表单。这是在提交表单之前处理最终检查的 JavaScript block : $('.enquiry-form-container form').submit(func
为什么我收到RangeError:超出最大调用堆栈错误?我正在尝试解析文本以找到数学并解决它。它一直有效,直到我开始实现括号'。我试图找出错误,但就是无法弄清楚。 我的代码: var alg = {
我收到以下错误: RangeError: Maximum call stack size exceeded. 在这一行: requestAnimFrame(Game.loop()); 在这段代码中:
我在显示来自本地 json 的数据时收到 RangeError (index): Invalid value: Valid value range is empty: 0。我正在尝试使用 simple
我在构建 ListView 时遇到错误。在这个 flutter 应用程序中,我尝试在单击按钮时为每一列计算一些点。但我总是遇到同样的错误。 ══╡ EXCEPTION CAUGHT BY GESTUR
大家好!初学者在这里! 我用Socket.IO制作了一个小Node.JS应用程序,该应用程序运行良好,直到我决定将套接字代码放入对象中以允许 namespace 管理为止。我现在对此方法有疑问(我相信
未为用户设置图像时,出现以下错误: “未处理的异常:RangeError:值不在范围内:22” 摆好照片后,一切就正确了 我的代码: Future getData() async { fina
我是一名优秀的程序员,十分优秀!