SingleChildScrollView中的Flutter CustomPaint不显示

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

我有一些类似的颤动代码:

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;
  }
}

我想自定义一个小部件以显示一些图像和其他东西,并且它的内容将超出屏幕,我希望它滚动,现在我已经完成了上面的一些工作,我使用SingleChildScrollView扭曲了CustomPaint,但是图像全部走了,我不知道为什么,请帮助我,英语不是我的母语,所以请原谅任何错误,谢谢

flutter flutter-layout
1个回答
0
投票

[当遇到类似问题时,您需要找出错误。为此,请尝试制作最简单的工作功能示例。

在这种情况下,简单的例子是_TalentPainter类,只有一个图像,没有SingleChildScrollView包装。

_TalentPainter无效,因为您在构造中有Future调用,并且在此时将调用paint方法时,_images为空。

© www.soinside.com 2019 - 2024. All rights reserved.