当我尝试从Widget build
函数返回以下内容时:
FutureBuilder(
future: _future,
builder: (context, snapshot){
return Stack(
children: [
if (_isPermissionGranted){
FutureBuilder<List<CameraDescription>>(
future: availableCameras(),
builder: (context, snapshot) {
if (snapshot.hasData) {
_initCameraController(snapshot.data!);
return Center(child: CameraPreview(_cameraController!));
} else {
return const LinearProgressIndicator();
}
},
),
}
],
);
}
);
显示以下错误:The element type 'Set<FutureBuilder<List<CameraDescription>>>' can't be assigned to the list type 'Widget'.
但是当我去掉条件if (_isPermissionGranted)
后面的花括号时,错误就消失了。欢迎分享为什么会发生这种情况。
3条答案
按热度按时间cqoc49vn1#
用花括号括起来是初始化
Set
的方式,这就是原因。这里使用的if
不是普通的if
,而是所谓的“集合if”,它总是不带花括号使用,并将花括号后面的内容视为单个对象。你可以在这里阅读更多关于这个“集合if”的信息:https://dart.dev/guides/language/language-tour#listsw8f9ii692#
请尝试以下代码:
pvcm50d13#
通过删除FutureBuilder小部件周围的花括号,您将返回单个小部件而不是一组小部件,这就是错误消失的原因。
要修复错误并保留花括号,只需通过调用Set:上的toList()方法将小部件集合转换为小部件列表即可。