Трепещущий дротик — ‘Map’ не может быть присвоен типу параметра ‘Map’

#flutter #dart #dart-null-safety

Вопрос:

Вот мой код.

 import 'package:flutter/material.dart';

class WpCreateColor {
  final Color wpColor = Color.fromARGB(255, 77, 203, 79);

  MaterialColor createMaterialColor() {
    List strengths = <double>[.05];
    Map swatch = <int, Color>{};
    final int r = wpColor.red, g = wpColor.green, b = wpColor.blue;

    for (int i = 1; i < 10; i  ) {
      strengths.add(0.1 * i);
    }
    strengths.forEach((strength) {
      final double ds = 0.5 - strength;
      swatch[(strength * 1000).round()] = Color.fromRGBO(
        r   ((ds < 0 ? r : (255 - r)) * ds).round(),
        g   ((ds < 0 ? g : (255 - g)) * ds).round(),
        b   ((ds < 0 ? b : (255 - b)) * ds).round(),
        1,
      );
    });
    return MaterialColor(wpColor.value, swatch);
  }
}
 

И это выдает следующую ошибку:

 Map<dynamic, dynamic> swatch
The argument type 'Map<dynamic, dynamic>' can't be assigned to the parameter type 'Map<int, Color>'.dartargument_type_not_assignable
 

Как я могу это решить?

Комментарии:

1. попробуйте использовать Map<int, Color> swatch = {};

2. @Сахдип Сингх Молодец! Это сработало. Как вы думаете, вы можете поместить эту информацию в качестве ответа, чтобы я мог принять ее в качестве официального ответа?

3. Вы можете добавить его и принять ИЛИ ответить, что приведенное ниже тоже хорошо, вы также можете принять это. Ваше здоровье.

Ответ №1:

В строке 8 приведенного выше кода переменная swatch определяется как a Map , которая по умолчанию является type dynamic , поэтому создается полный тип swatch as Map<dynamic, dynamic> , однако значение для этой переменной присваивается значению Map<int,Color> , вот почему вы получаете ошибку.

Чтобы исправить это изменение:

Map swatch = <int, Color>{};

Для

final swatch = <int, Color>{};

В dart предлагается опустить типы для локальных переменных, потому что

Обычно типы локальных переменных можно легко определить, поэтому нет необходимости их комментировать.

Посетите документы dart для получения дополнительной информации об этом предложении