Функция расширения дротика видна только если находится в том же файле, где она вызывается - PullRequest
1 голос
/ 31 января 2020

Допустим, я создаю два файла. Сначала я создаю функцию расширения и вызываю ее из класса в другом файле.

Файл date_extensions.dart :

import 'package:date_format/date_format.dart';

extension on DateTime {
  String getSQLFriendly() => formatDate(this, ["yyyy", "-", "MM", "-", "dd", " ", "HH", ":", "mm", ":", "ss"]);
}

и файл some_date_class.dart :

import 'date_extensions.dart';

class SomeClassWithDate{

  DateTime dateTime;

  SomeClassWithDate(this.dateTime);

  toString() => dateTime.getSQLFriendly();

}

Теперь я получаю сообщение об ошибке:

lib/test/some_date_class.dart:9:26: Error: The method 'getSQLFriendly' isn't defined for the class 'DateTime'.
 - 'DateTime' is from 'dart:core'.
Try correcting the name to the name of an existing method, or defining a method named 'getSQLFriendly'.
  toString() => dateTime.getSQLFriendly();

Теперь, когда я помещаю функцию расширения в тот же файл, куда я ее вызываю, все работает нормально.

Это ошибка, особенность или я что-то не так делаю? Я хотел бы, чтобы последний ответ. :)

1 Ответ

5 голосов
/ 31 января 2020

Расширения Anonymous Dart (без имени) будут видны только для файла, в котором они находятся.

Если вы хотите использовать его в других файлах, присвойте ему имя.

import 'package:date_format/date_format.dart';

extension MyExtension on DateTime {}

Это, вероятно, следует добавить к Документация по расширениям Dart .

...