Dart 新手,抱歉。
给定原始函数:
Future<void> setAppKeyClickEnabled(bool value) async {
await _sharedPreferences.setBool(_appKeyClickEnabledKey, value);
notifyListeners();
}
我想将其重构为:
Future<void> set(String key, bool value) async {
await _sharedPreferences.setBool(key, value);
notifyListeners();
}
Future<void> setAppKeyClickEnabled(bool value) async {
set(_appKeyClickEnabledKey, value);
}
setAppKeyClickEnabled
的签名现在应该是:
Future<void> setAppKeyClickEnabled(bool value) async
或
void setAppKeyClickEnabled(bool value)
或者换句话说,
async
关键字改变了接口,还是实现细节?
额外问题(这是我第一次看 Dart),有没有办法让
set
私有?
的签名现在应该是:setAppKeyClickEnabled
Future<void> setAppKeyClickEnabled(bool value) async
或
void setAppKeyClickEnabled(bool value)
如果您想保留原始语义,您的
setAppKeyClickEnabled
实现是不正确的,因为调用者将无法再等待操作完成。
您的选择应该是
await
或 Future
返回的 set
:
Future<void> setAppKeyClickEnabled(bool value) async {
await set(_appKeyClickEnabledKey, value);
}
或直接返回
Future
:
Future<void> setAppKeyClickEnabled(bool value) {
return set(_appKeyClickEnabledKey, value);
}
(第二个版本也可以使用箭头符号(
=>
)来编写,但我故意使用明确的return
语句来使与第一个版本的区别更清楚。)
或者换句话说,
关键字改变了接口,还是实现细节?async
async
是实现细节,而不是接口的一部分。返回 Future
的函数是异步的。 async
关键字仅允许在函数中使用 await
作为关键字,并自动将返回值包装在 Future
中。