Flutter-参数类型'Complexity / * 1 * /'不能分配给参数类型'Complexity / * 2 * /

时间:2020-10-17 15:06:27

标签: android flutter dart cross-platform

我正在尝试通过将两个枚举参数发送到这样的屏幕来运行此应用程序:

import 'package:flutter/material.dart';

import '../widgets/meal_item.dart';
import '../models/meal.dart';

class CategoryMealsScreen extends StatelessWidget {
  static const routeName = '/category-meals';

  @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) {
      print('a');
      return meal.categories.contains(categoryId);
    }).toList();

    return Scaffold(
      appBar: AppBar(
        title: Text(categoryTitle),
      ),
      body: ListView.builder(
        itemBuilder: (ctx, index) {
          return MealItem(
            id: categoryMeals[index].id,
            title: categoryMeals[index].title,
            imageUrl: categoryMeals[index].imageUrl,
            duration: categoryMeals[index].duration,
            complexity: categoryMeals[index].complexity,
            affordability: categoryMeals[index].affordability,
          );
        },
        itemCount: categoryMeals.length,
      ),
    );
  }
}

这是Meal.dart文件:

    import 'package:flutter/foundation.dart';

enum Complexity {
  Simple,
  Challenging,
  Hard,
}

enum Affordability {
  Affordable,
  Pricey,
  Luxurious,
}

class Meal {
  final String id;
  final List<String> categories;
  final String title;
  final String imageUrl;
  final List<String> ingredients;
  final List<String> steps;
  final int duration;
  final Complexity complexity;
  final Affordability affordability;
  final bool isGlutenFree;
  final bool isLactoseFree;
  final bool isVegan;
  final bool isVegetarian;

  const Meal({
    @required this.id,
    @required this.categories,
    @required this.title,
    @required this.imageUrl,
    @required this.ingredients,
    @required this.steps,
    @required this.duration,
    @required this.complexity,
    @required this.affordability,
    @required this.isGlutenFree,
    @required this.isLactoseFree,
    @required this.isVegan,
    @required this.isVegetarian,
  });
}

如果我在上面的第一行代码的这两行注释,则该应用程序运行良好:

complexity: categoryMeals[index].complexity,
affordability: categoryMeals[index].affordability,

即使在运行后,如果我取消注释并使用热重载将其重新加载,它也可以正常工作而不会出现任何问题,除非运行应用程序时未对其进行注释,那么我会收到此错误:

Launching lib\main.dart on Android SDK built for x86 in debug mode...
Running Gradle task 'assembleDebug'...
lib/screens/category_meals_screen.dart:31:46: Error: The argument type 'Complexity/*1*/' can't be assigned to the parameter type 'Complexity/*2*/'.
 - 'Complexity/*1*/' is from 'lib/models/meal.dart'.
 - 'Complexity/*2*/' is from 'package:deliMeals/models/meal.dart' ('lib/models/meal.dart').
            complexity: categoryMeals[index].complexity,
                                             ^
lib/screens/category_meals_screen.dart:32:49: Error: The argument type 'Affordability/*1*/' can't be assigned to the parameter type 'Affordability/*2*/'.
 - 'Affordability/*1*/' is from 'lib/models/meal.dart'.
 - 'Affordability/*2*/' is from 'package:deliMeals/models/meal.dart' ('lib/models/meal.dart').
            affordability: categoryMeals[index].affordability,
                                                ^


FAILURE: Build failed with an exception.

3 个答案:

答案 0 :(得分:1)

嗨,请尝试这种方式...更改此文件CategoryMealsScreen 的导入语法

import '../models/meal.dart'package:deliMeals/models/meal.dart

答案 1 :(得分:1)

这个问题模棱两可,但是通过替换导入行解决了

import '../dummy_data.dart';

与此一起

import 'package:deliMeals/dummy_data.dart';

谁能解释有什么区别?

答案 2 :(得分:0)

我遇到了同样的问题,然后我将每个文件的导入语法从 import '../models/meal.dart' 更改为 package:deliMeals/models/meal.dart ,我删除了 ../ 并在每个文件中写入了整个路径< /p>

然后我在终端运行

flutter clean
flutter Pub get

效果很好