是否有不需要 Widget 作为输出的 FutureBuilder 替代方案?
Is there a FutureBuilder alternative that would NOT require a Widget as the output?
这是我的背景图片:
Container(
decoration: BoxDecoration(image: DecorationImage(fit: BoxFit.cover, image: FileImage(widget.lightAnimation.imageFile))),
widget.lightAnimation.imageFile: FutureBuilder(
future: getImageFile(),
builder: (context, snapshot) => snapshot.data,
)
Future<File> getImageFile()
returns一个File
;
问题是输出必须是 Widget,File
和 BoxDecoration
都不被认为是 Widget
下一个最接近的是 Container
,但这对我来说不起作用,因为 Container 的 child 非常健壮,充满了许多变量、函数等
换句话说,我可以做的是:
FutureBuilder(
future: getImageFile(),
builder: (context, snapshot) => Container(
decoration: BoxDecoration(image: DecorationImage(fit: BoxFit.cover, image: FileImage(snapshot.data))),
),
)
但是,在这种情况下,我将不得不将我所有的大 child 移动到 FutureBuilder,因为 Container 会随身携带它,而我不想这样做。
有没有我可以使用不需要 Widget 作为输出的替代方案来代替 FutureBuilder?或者也许有其他可能的方法来制作我的背景图片,未来“builder/maker/function”?
这就是 ValueListenableBuilder
的目的。
ValueListenableBuilder<File>(
valueListenable: imageFile,
builder: (_, _imageFile, __) {
return Container(
decoration: BoxDecoration(image: DecorationImage(fit: BoxFit.cover, image: _imageFile ));
})
imageFile 必须是 ValueNotifier<File>
。有两种方式:
- 像这样声明 imageFile:
final imageFile = ValueNotifier<File>("initial_File");
- 或像这样在单独的 class 中:
class ImageFile extends ValueNotifier<File> {
updateFile() => value='newFile';
}
虽然将 FilePath 实现为一个可监听的变量比将 File 实现更好。
这是我的背景图片:
Container(
decoration: BoxDecoration(image: DecorationImage(fit: BoxFit.cover, image: FileImage(widget.lightAnimation.imageFile))),
widget.lightAnimation.imageFile: FutureBuilder(
future: getImageFile(),
builder: (context, snapshot) => snapshot.data,
)
Future<File> getImageFile()
returns一个File
;
问题是输出必须是 Widget,File
和 BoxDecoration
都不被认为是 Widget
下一个最接近的是 Container
,但这对我来说不起作用,因为 Container 的 child 非常健壮,充满了许多变量、函数等
换句话说,我可以做的是:
FutureBuilder(
future: getImageFile(),
builder: (context, snapshot) => Container(
decoration: BoxDecoration(image: DecorationImage(fit: BoxFit.cover, image: FileImage(snapshot.data))),
),
)
但是,在这种情况下,我将不得不将我所有的大 child 移动到 FutureBuilder,因为 Container 会随身携带它,而我不想这样做。
有没有我可以使用不需要 Widget 作为输出的替代方案来代替 FutureBuilder?或者也许有其他可能的方法来制作我的背景图片,未来“builder/maker/function”?
这就是 ValueListenableBuilder
的目的。
ValueListenableBuilder<File>(
valueListenable: imageFile,
builder: (_, _imageFile, __) {
return Container(
decoration: BoxDecoration(image: DecorationImage(fit: BoxFit.cover, image: _imageFile ));
})
imageFile 必须是 ValueNotifier<File>
。有两种方式:
- 像这样声明 imageFile:
final imageFile = ValueNotifier<File>("initial_File");
- 或像这样在单独的 class 中:
class ImageFile extends ValueNotifier<File> {
updateFile() => value='newFile';
}
虽然将 FilePath 实现为一个可监听的变量比将 File 实现更好。