我有一些类似的颤动代码:
class ImagePage extends StatefulWidget {
final Class clazz;
ImagePage(this.clazz);
@override
_ImagesPageState createState() => _ImagesPageState();
}
class _ImagesPageState extends State<ImagePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColor,
appBar: AppBar(
title: Text(widget.clazz.name),
),
body: SingleChildScrollView(
child: CustomPaint(
painter: _TalentPainter([
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
"image.png",
]),
)),
);
}
}
class _TalentPainter extends CustomPainter {
Paint _paint;
List<ui.Image> _images = <ui.Image>[];
_TalentPainter(List<String> _imagePaths) {
this._paint = Paint()..isAntiAlias = true;
_imagePaths.forEach((path) {
getImage(path).then((image) {
_images.add(image);
});
});
}
@override
void paint(Canvas canvas, Size size) {
for (int i = 0; i < _images.length; i++) {
ui.Image image = _images.elementAt(i);
canvas.drawImage(
image, Offset(image.width.toDouble(), image.height * i.toDouble()), _paint);
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
Future<ui.Image> getImage(String image) async {
ByteData data = await rootBundle.load("assets/images/class_icon/$image");
Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List());
ui.FrameInfo fi = await codec.getNextFrame();
return fi.image;
}
}
我想自定义一个小部件以显示一些图像和其他东西,并且它的内容将超出屏幕,我希望它滚动,现在我已经完成了上面的一些工作,我将CustomPaint与SingleChildScrollView一起变形,但是图像都消失了,我不知道为什么,请帮助我,英语不是我的母语,所以请原谅任何错误,谢谢
答案 0 :(得分:0)
遇到类似问题时,需要隔离该错误。为此,请尝试制作最简单的功能示例。
在这种情况下,简单的示例是_TalentPainter
类,仅包含一个图像,没有SingleChildScrollView
换行。
_TalentPainter
不起作用,因为您在构造中有Future调用,并且在此时将调用paint方法时,_images
为空。
答案 1 :(得分:0)
由于SingleChildScrollView“隐藏”了该子代的上下文布局,因此该绘画不起作用。因此,您需要定义CustomPaint的大小。 LayoutBuilder将帮助获取上下文的约束。