栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Flutter中向下拖动时缩放内容

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Flutter中向下拖动时缩放内容

试试这个

CustomScrollView

LayoutBuilder(  builder: (context, constraints) {    return CustomScrollView(      slivers: <Widget>[        SliverPersistentHeader(          pinned: true,          delegate: Delegate(),        ),        SliverToBoxAdapter(          child: Container( decoration: BoxDecoration(   borderRadius:  BorderRadius.all(Radius.circular(30)),   border:  Border.all(     width: 2.0,     color:  Colors.deepPurple,   ), ), height: constraints.biggest.height, child: Center(   child: Text('Drag me down (or up) in order to see (or hide) the red icon on the top',     textAlign: TextAlign.center,     textScaleFactor: 5.0,   ), ),          ),        ),      ],    );  }),

“委托”类如下:

class Delegate extends SliverPersistentHeaderDelegate {  @override  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {    // print(shrinkOffset);    return Opacity(      opacity: 1 - shrinkOffset / maxExtent,      child: FittedBox(child: Icon(Icons.alarm, color: Colors.red,), fit: BoxFit.contain),    );  }  @override double get maxExtent => 300;  @override double get minExtent => 100;  @override bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) => true;}

现在尝试上下拖动文本

编辑 :这是一个小修改,类似于您的示例:

LayoutBuilder(  builder: (context, constraints) {    return CustomScrollView(      slivers: <Widget>[        SliverPersistentHeader(          pinned: true,          delegate: Delegate(),        ),        SliverToBoxAdapter(          child: Container( padding: EdgeInsets.only(top: 75), height: constraints.biggest.height, child: Text('Drag me down (or up) in order to make the red icon bigger (or smaller)',   textAlign: TextAlign.center,   textScaleFactor: 5.0, ),          ),        ),      ],    );  }),

和修改后的委托类:

class Delegate extends SliverPersistentHeaderDelegate {  @override  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {    // print(shrinkOffset);    return OverflowBox(      maxHeight: 400,      alignment: Alignment.topCenter,      child: Container(        height: 400 - shrinkOffset,        child:  FittedBox(child: Icon(Icons.alarm, color: Colors.red,), fit: BoxFit.contain),      ),     );  }  @override double get maxExtent => 300;  @override double get minExtent => 1;  @override bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) => true;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号