абстрактный метод attach
Привязывает этот финализатор к value.
Когда value перестанет быть доступным программе, но при этом останется привязанным к этому финализатору, может быть вызван колбэк этого финализатора с аргументом finalizationToken. Колбэк может быть вызван не более одного раза для каждой активной привязки — той, которая не была отменена вызовом Finalizer.detach.
Если указано ненулевое значение null detach, этот объект можно передать в Finalizer.detach, чтобы отменить привязку.
Аргументы value и detach не учитываются при определении доступности этих объектов программе. Оба должны быть объектами, поддерживаемыми в качестве ключа Expando. Это может быть один и тот же объект.
Пример:
class Database {
// Keeps the finalizer itself reachable, otherwise it might be disposed
// before the finalizer callback gets a chance to run.
static final Finalizer<DBConnection> _finalizer =
Finalizer((connection) => connection.close());
factory Database.connect() {
// Wraps the connection in a nice user API,
// *and* closes connection if the user forgets to.
final connection = DBConnection.connect();
final wrapper = Database._fromConnection();
// Get finalizer callback when `wrapper` is no longer reachable.
_finalizer.attach(wrapper, connection, detach: wrapper);
return wrapper;
}
Database._fromConnection();
// Some useful methods.
} К одному и тому же токену финализации можно привязать несколько объектов, а финализатор можно привязать к одному и тому же объекту несколько раз — с разными или одинаковыми токенами финализации.
Реализация
void attach(Object value, T finalizationToken, {Object? detach});
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-core/Finalizer/attach.html