在 Flutter 的 FutureBuilder 中检查 `snapshot.hasData` 和 `snapshot.data != null` 是否多余?

问题描述 投票:0回答:2

我正在使用 Flutter 的

FutureBuilder
,并发现了一种模式,在渲染小部件之前会检查 both
snapshot.hasData
and
snapshot.data != null

FutureBuilder(
  future: future,
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData && snapshot.data != null) {
      return widgetToBuild;
    } else if (snapshot.hasError) {
      return Icon(Icons.error_outline);
    } else {
      return CircularProgressIndicator();
    }
  }
)

在检查

AsyncSnapshot
的源代码时,我注意到
hasData
被定义为
true
,如果
data
不是
null

bool get hasData => data != null;
鉴于此实现,检查 

snapshot.hasData

snapshot.data != null
 是否多余? 
snapshot.hasData
 还不够吗,因为它本质上会检查 
data
 是否不是 
null

我很好奇是否存在两种检查都是必要的场景,或者这是否只是开发人员经常错误的

FutureBuilder

使用中的常见误解。

flutter dart future flutter-futurebuilder
2个回答
0
投票
是的,这是多余的,你是对的:如果你替换你发布的第一部分中的

AsyncSnapshot

代码,它看起来像这样

if (snapshot.data != null && snapshot.data != null) {
关于 

null

 可能产生 
future
 结果,它在我的某些代码中发生过一次(由于意外情况),并且 
FutureBuilder
 卡在 
CircularProgressIndicator
 上,因为从未检测到数据。
因此,除非发生变化,否则我认为 
null
-返回期货不应与 
FutureBuilder
 一起使用。


0
投票
为了方便未来的处理程序,我建议这样做

是的,这是多余的,因为 hasData getter 已经这样做了

FutureBuilder( future: getValue(), builder: (BuildContext context, AsyncSnapshot snapshot) { // Check if is loading if (snapshot.connectionState == ConnectionState.waiting) { return const CircularProgressIndicator(); } // When the builder has data if (snapshot.hasData) { // Here you can force no null without issues return Text(snapshot.data); } return const Icon(Icons.error_outline); }, )
    
© www.soinside.com 2019 - 2024. All rights reserved.