基本上,您希望基类声明一个公共 getter。我认为最简单的方法是:
abstract class ListController {
static const defaultNumberOfDocumentPerPage = 7;
int get numberOfDocumentPerPage => defaultNumberOfDocumentPerPage;
}
class EventListController extends ListController {
int _numberOfDocumentPerPage = ListController.defaultNumberOfDocumentPerPage;
@override
int get numberOfDocumentPerPage => _numberOfDocumentPerPage;
}
如果您不想要单独的命名常量,您可以使用调用原始 getter 的结果显式初始化您的内部值:
abstract class ListController {
final int numberOfDocumentPerPage = 7;
}
class EventListController extends ListController {
EventListController() {
_numberOfDocumentPerPage = super.numberOfDocumentPerPage;
}
// ignore: super_in_invalid_context, https://github.com/dart-lang/sdk/issues/46850
late int _numberOfDocumentPerPage = super.numberOfDocumentPerPage;
@override
int get numberOfDocumentPerPage => _numberOfDocumentPerPage;
}
另一种方法是在基类中提供一个受保护的设置器:
import 'package:meta/meta.dart';
abstract class ListController {
int _numberOfDocumentPerPage = 7;
int get numberOfDocumentPerPage => _numberOfDocumentPerPage;
@protected
set numberOfDocumentPerPage(int value) => _numberOfDocumentPerPage = value;
}
但请注意,@protected注释只是为分析器提供了一个提示,以便它可以警告违规行为;它不会在编译时或运行时强制执行。