Существуют различные способы в зависимости от ваших точных требований.
Вы можете использовать дополнительный класс для доступа к синглтону, где вы можете создать несколько экземпляров, при этом гарантируя, что значение, к которому он предоставляет доступ, будет синглтоном:
class MySingleton {
static final MySingleton value = MySingleton.();
MySingleton._();
}
class MySingletonHelper {
MySingleton get value => MySingleton.value;
}
или альтернативный способ использования @visibleForTesting
с ограничением, что одноэлементное значение не может быть final
, а доступ на запись ограничен только DartAnalyzer, но не компилятором (я не считаю это серьезным ограничением) :
import 'package:meta/meta.dart';
class MySingleton {
static MySingleton _value = MySingleton.();
static MySingleton value => get _value;
@visibleForTesting
static set value(MySingleton val) => _value = val;
MySingleton._();
}