Не удается создать метод в расширении

#flutter #dart

Вопрос:

Просто хотел бы создать свою собственную версию toString на пользовательском типе.

Похоже, я здесь что-то упускаю.

 extension on WeatherResponse { 

@override
    String toString() {
       return "City Name is: $cityName";
     }
}
 

Я получаю ошибку:

     The method doesn't override an inherited method.
Try updating this class to match the superclass, or removing the override annotation.dartoverride_on_non_overriding_member

Extensions can't declare members with the same name as a member declared by 'Object'.

Try specifying a different name for the member.dartextension_declares_member_of_object

The declaration 'toString' isn't referenced.
Try removing the declaration of 'toString'.
 

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

1. Используйте tostring() в нижнем регистре. Ошибка ясно говорит о том, что вы не можете объяснить причину.

2. @HuthaifaMuayyad, даже если у класса WeatherResponse есть toString метод

3. Точно, там есть одно определение. Вы не можете определить другой с тем же именем в расширении.

4. Спасибо всем, исходящее от Swift, где именно так используются расширения, поэтому вам нужно настроить мышление.

Ответ №1:

если вы хотите перезаписать метод toString, то вместо объявления его в классе расширения поместите его в фактическое определение класса. подобный этому;

 class YourClass extends Object {
@override
String toString() ...
}