繁体   English   中英

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

[英]Flutter - argument type 'Complexity/*1*/' can't be assigned to the parameter type 'Complexity/*2*/

我正在尝试使用发送到屏幕的两个枚举参数来运行此应用程序,如下所示:

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.

问题不明确,但通过更换导入线解决了

import '../dummy_data.dart';

有了这个

import 'package:deliMeals/dummy_data.dart';

谁能解释一下有什么区别?

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

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

我遇到了同样的问题,发现问题出在 dummy_data.dart 文件和导入 './models/Meal.dart'; 有问题。

尝试改变

导入'./models/Meal.dart'; 导入'./models/meal.dart';

用小写的“m”,问题就解决了。

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

然后我在终端运行

flutter clean
flutter Pub get

它工作得很好

如果这是关于颤振教程,这可能是由不一致的包含引起的。 检查所有文件并确保所有包含的内容一致

请参阅下面的不一致。

import '/models/meal.dart'; (file1)
import 'package:flutter_complete_guide/models/Meal.dart'; (file2)

将此更改为

import '/models/meal.dart'; (file1)
import '/models/meal.dart'; (file2)

还要确保没有重复的文件名。 最后通过关闭文件夹并再次打开它来关闭 Visual Code 中的项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM