代码之家  ›  专栏  ›  技术社区  ›  Andrii Turkovskyi

如何动态更改SliVerAppBar高度

  •  0
  • Andrii Turkovskyi  · 技术社区  · 7 年前

    我显示来自网络的图像,滚动时缩小。我想展示整个图像,不需要垫料或作物。但是,如果我用expandedheight注释行-没有图像-只有高度为的appbar。有没有可以根据上传图片大小改变大小的小部件?

    CustomScrollView(
      controller: controller,
      key: listKey,
      slivers: <Widget>[
        SliverAppBar(
        //  expandedHeight: 200.0,
          flexibleSpace: FlexibleSpaceBar(
            background: getHeroWidget(
                _conference.dbId,
                FadeInImage.assetNetwork(
                  placeholder: conf_img_placeholder,
                  image: _conference.info.image,
                  fit: BoxFit.cover,
                )),
            title: Text(conference_title),
            centerTitle: true,
          ),
          pinned: true,
        ),
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Andrii Turkovskyi    7 年前

    最后,我创建了自定义的SliVerAppBar。另一个问题是状态栏的宽度,在计算时必须考虑到这一点。

    import 'dart:ui' as ui;
    
    class _HeaderBar extends StatefulWidget {    
      @override
      State<StatefulWidget> createState() => _HeaderState();
    }
    
    class _HeaderState extends State<_HeaderBar> {
      @override
      Widget build(BuildContext context) {
        Image image = Image.network(...);
        Completer<ui.Image> completer = new Completer<ui.Image>();
        image.image.resolve(ImageConfiguration()).addListener((ImageInfo info, bool _) {
          completer.complete(info.image);
        });
        final double statusBarHeight = MediaQuery.of(context).padding.top;
        return FutureBuilder(
            future: completer.future,
            builder: (context, AsyncSnapshot<ui.Image> snapshot) {
              return SliverAppBar(
                      expandedHeight: snapshot.hasData
                    ? MediaQuery.of(context).size.width / snapshot.data.width.toDouble() * snapshot.data.height.toDouble() -
                        statusBarHeight
                    : 0.0,
    ...