Hed*_*win 7 flutter flutter-futurebuilder flutter-lints
我觉得linter规则discarded_future有问题
有没有办法使用discarded_future lint 规则,而不必每次使用FutureBuilder 时都忽略该规则。使用简单的 FutureBuilder 时触发规则是否正常?如果是,正确的方法是什么?
FutureBuilder<void>(
future: retrieveLostData(),
builder: (
BuildContext context,
AsyncSnapshot<void> snapshot,
) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return buildRowIconPhoto();
case ConnectionState.waiting:
return buildRowIconPhoto();
case ConnectionState.done:
return buildRowIconPhoto();
default:
return buildRowIconPhoto();
}
},
)
Run Code Online (Sandbox Code Playgroud)
Future<void> retrieveLostData() async {
LostDataResponse response = await _imagePicker.retrieveLostData();
if (response.isEmpty) {
return;
}
if (response.file != null && widget.onPhotoTaken != null) {
widget.onPhotoTaken!(
File(response.file!.path),
false,
);
}
}
Run Code Online (Sandbox Code Playgroud)
我完全同意你的看法。我不明白为什么这个 linter 警告关心该future属性是接受同步未来还是异步未来。
尽管如此,您可以通过以下方法绕过该警告:
class _SomeClassState extends State<SomeClass> {
Future<void> retrieveLostData() async {
LostDataResponse response = await _imagePicker.retrieveLostData();
if (response.isEmpty) {
return;
}
if (response.file != null && widget.onPhotoTaken != null) {
widget.onPhotoTaken!(
File(response.file!.path),
false,
);
}
}
Future<void> retrieveLostDataFuture() async {
_lostDataFuture = retrieveLostData();
}
late final Future<void> _lostDataFuture;
@override
void initState() {
super.initState();
unawaited(retrieveLostDataFuture());
}
@override
Widget build(BuildContext context) {
return FutureBuilder<void>(
future: _lostDataFuture,
builder: (
BuildContext context,
AsyncSnapshot<void> snapshot,
) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return buildRowIconPhoto();
case ConnectionState.waiting:
return buildRowIconPhoto();
case ConnectionState.done:
return buildRowIconPhoto();
default:
return buildRowIconPhoto();
}
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您不使用 a StatefulWidget,则可以在构造函数中执行相同的操作,而不是调用retrieveLostDataFuturein :initState
class SomeClass extends StatelessWidget {
SomeClass() {
unawaited(retrieveLostDataFuture());
}
}
Run Code Online (Sandbox Code Playgroud)
我认为,这两种变体都非常丑陋,而您的原始代码可能是最好使用的版本。
这段代码是为那些对解决 linter 警告非常迂腐的人提供的。
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |