【发布时间】:2020-02-23 05:57:58
【问题描述】:
问题正文有点长,但请阅读并理解我的问题并帮助我。
非常感谢您
我有一个名为ImageWidget 的类扩展StatefulWidget,它返回一个GestureDetector,它有一个子CachedNetworkImage。我的代码正在运行,我可以调用这个 ImageWidget 类,并且如果我将其作为单个 Widget 返回,则可以从任何地方显示图像。
像这样 (这些代码都可以工作)
return ImageWidget(
imageUrl: imageUrl,
);
return Container(
child: ImageWidget(
imageUrl: imageUrl,
));
return Center(
child: ImageWidget(
imageUrl: imageUrl,
));
我的目标是使用Row 或Column 或ListView 显示此ImageWidget 的列表/多个。我可以将这个 ImageWidget 类放到任何地方(例如 Center、Container),但 Row 或 Column 或 ListView 需要多个孩子。
像这样 (这些代码不起作用;无法显示图像;也没有错误)
return Column(
children: <Widget>[
ImageWidget(
imageUrl: imageUrl,
),
ImageWidget(
imageUrl: imageUrl,
),
ImageWidget(
imageUrl: imageUrl,
)
],
);
每当我将ImageWidget 放在这些Widgets(Row 或Column 或ListView)中的任何一个上时,图像都不会显示。我认为问题出在imageBuilder,因为当我将其删除或将其设置为null 时,它可以工作,但我做不到,我需要保持图像的形状。
ImageWidget.dart 类
import 'package:analog_components/Utilities/MessageUnilities.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
class ImageWidget extends StatefulWidget {
final String imageUrl;
final BoxShape shape;
final BoxFit fit;
ImageWidget(
{this.imageUrl, this.shape: BoxShape.rectangle, this.fit: BoxFit.contain})
: assert(imageUrl != null),
assert(shape != null),
assert(fit != null);
@override
State<StatefulWidget> createState() {
return _ImageWidget();
}
}
class _ImageWidget extends State<ImageWidget> {
@override
Widget build(BuildContext context) {
print('image widget');
return GestureDetector(
onTap: () {
MessageUtilities.showShortToast('tap');
},
child: CachedNetworkImage(
imageUrl: widget.imageUrl,
placeholder: (context, url) => CircularProgressIndicator(),
imageBuilder: (context, imageProvider) => Container(
decoration: BoxDecoration(
shape: widget.shape,
image: DecorationImage(
image: imageProvider,
fit: widget.fit,
),
),
),
errorWidget: (context, url, error) => Icon(Icons.error),
)
);
}
}
如果我将ImageWidget 放到CircularAvatar 中,那么它可以工作,我可以把它放到Row 或Column 中。
return Column(
children: <Widget>[
CircleAvatar(
radius: 50,
child: ImageWidget(
imageUrl: imageUrl,
),
),
CircleAvatar(
radius: 50,
child: ImageWidget(
imageUrl: imageUrl,
),
),
CircleAvatar(
radius: 50,
child: ImageWidget(
imageUrl: imageUrl,
),
),
],
);
另外,我不能这样做,因为图像已损坏并且我不想要圆形图像。我需要保持一个矩形BoxFit.contain 形状。
【问题讨论】:
-
如果您将小部件包装在行或列中,则小部件应具有有限的高度或宽度,具体取决于哪种布局,或者行或列应具有有限的宽度或高度。
-
我如何使用 wrap_content 之类的东西来保持图像(CachedNetworkImage)的确切宽度和高度,而不是定义高度:200。
-
我做了 width: MediaQuery.of(context).size.width 但没有高度,图像不显示。我不知道我应该为高度定义多少,我想要图像的确切高度。
-
您希望图像在一行或一列中
-
我将同时使用它的行和列。如果我设置高度和宽度,我可以在行和列中显示,但它不会显示图像的确切大小。我想要的是
height->wrap_content和width->wrap_content中的Container
标签: android flutter dart widget