未为类型 'Iterable<Meal>' 定义运算符“[]”。尝试定义运算符“[]”。dartundefined_operator

The operator '[]' isn't defined for the type 'Iterable<Meal>'. Try defining the operator '[]'.dartundefined_operator

我正在尝试 return 另一个小部件中 class MealItem 的构造函数 class 我正确地导入了这个

错误未为类型 'Iterable' 定义运算符“[]”。尝试定义运算符“[]”。dartundefined_operator

这里是 MealItem class

import 'package:flutter/material.dart';
import '../models/meal.dart';

class MealItem extends StatelessWidget {
  final String title;
  final String imageUrl;
  final int duration;
  final Complexity complexity;
  final Affordability affordability;

  MealItem(
      this.title,
      this.imageUrl,
      this.duration,
      this.complexity,
      this.affordability
    );
  }
}

这是 CategoryMealsScreen 中的错误 class

import 'package:flutter/material.dart';
import '../widgets/meal_item.dart';
import '../models/dummy_data.dart';

class CategoryMealsScreen extends StatelessWidget {
  static const routeName = '/CategoriesScreen';

  //final String categoryId;
  //final String categoryTitle;

  //CategoryMealsScreen(this.categoryId,this.categoryTitle);

  @override
  Widget build(BuildContext context) {
    final routeArgs =
        ModalRoute.of(context).settings.arguments as Map<String, String>;
    final categoryTitle = routeArgs['title'];
    final categoryId = routeArgs['id'];
    final categoryMeals = DUMMY_MEALS.where((meal) {
      return meal.categories.contains(categoryId);
    });
    return Scaffold(
      appBar: AppBar(title: Text(categoryTitle)),
      body: ListView.builder(
        itemBuilder: (ctx, index) {
          return MealItem(
              title : categoryMeals[index].title,
              imageUrl: categoryMeals[index].imageUrl,
              duration: categoryMeals[index].duration,
              complexity: categoryMeals[index].complexity,
              affordability: categoryMeals[index].affordability
           );
        },
        itemCount: categoryMeals.length,
      ),
    );
  }
}

这里是 IDE 使用 vsCode 的错误:

The operator '[]' isn't defined for the type 'Iterable<Meal>'.
Try defining the operator '[]'.

任何帮助将不胜感激

您正在将 named 参数传递给采用 positional 参数的构造函数。

变化:

import 'package:flutter/material.dart';
import '../models/meal.dart';

class MealItem extends StatelessWidget {
  final String title;
  final String imageUrl;
  final int duration;
  final Complexity complexity;
  final Affordability affordability;

  // use parenthesis '{}' to wrap the constructor arguments to make them named arguments
  MealItem({
      this.title,
      this.imageUrl,
      this.duration,
      this.complexity,
      this.affordability
    });
  }
}

或者在创建 MealItem

时简单地删除名称并传递位置参数

另外:默认情况下,位置参数是 required,但命名参数不是。将它们更改为命名参数后,如果需要

,请不要忘记将它们标记为@required

这里也用toList()

final categoryMeals = DUMMY_MEALS.where((meal) {
  return meal.categories.contains(categoryId);
}).toList();