Flutter 底部滑出实现 showBottomSheet (七)

class _DetailScaffoldViewState extends State<ProductInfoShareScaffold> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(ScreenUtil().setHeight(40.0)),
        child: AppBar(
          actions: <Widget>[
            //要使用builder  不然Scaffold 取不到
            new Builder(builder: (BuildContext context) {
              return Container(
                child: IconButton(
                  onPressed: () {
                    Scaffold.of(context)
                        .showBottomSheet<Null>((BuildContext context) {
                      return Container(
                        height: ScreenUtil().setHeight(250),
                        child: Container(
                          child: Column(
                            children: <Widget>[
                              Container(
                                padding:EdgeInsets.all(9),
                                child: Text("分享到"),
                              ),
                              Container(
                                margin: EdgeInsets.only(top: ScreenUtil().setHeight(14)),
                                child: Row(
                                  children: <Widget>[
                                    Expanded(
                                      child: Container(
                                        child: Container(
                                          child: Image.asset("images/xinlang.png"),
                                          margin: EdgeInsets.all(14),
                                        ),
                                        color: Colors.white,
                                        margin: EdgeInsets.all(
                                            ScreenUtil().setWidth(11)),
                                      ),
                                    ),
                                    Expanded(
                                      child: Container(
                                        child: Container(
                                          child: Image.asset("images/weixin.png"),
                                          margin: EdgeInsets.all(14),
                                        ),
                                        color: Colors.white,
                                        margin: EdgeInsets.all(
                                            ScreenUtil().setWidth(11)),
                                      ),
                                    ),
                                    Expanded(
                                      child: Container(
                                        child: Container(
                                          child: Image.asset("images/pengyou.png"),
                                          margin: EdgeInsets.all(14),
                                        ),
                                        color: Colors.white,
                                        margin: EdgeInsets.all(
                                            ScreenUtil().setWidth(11)),
                                      ),
                                    ),
                                    Expanded(
                                      child: Container(
                                        child: Container(
                                          child: Image.asset("images/qq.png"),
                                          margin: EdgeInsets.all(14),
                                        ),
                                        color: Colors.white,
                                        margin: EdgeInsets.all(
                                            ScreenUtil().setWidth(11)),
                                      ),
                                    )
                                  ],
                                ),
                              ),
                              Container(
                                child: Row(
                                  children: <Widget>[
                                    Expanded(
                                      child: Center(
                                        child: Text("新浪微博"),
                                      ),
                                    ),
                                    Expanded(
                                      child: Center(child: Text("微信好友"),),
                                    ),
                                    Expanded(
                                      child: Center(child: Text("微信朋友圈"),),
                                    ),
                                    Expanded(
                                      child: Center(child: Text("QQ"),),
                                    )
                                  ],
                                ),
                              ),
                              Container(
                                width: ScreenUtil.screenWidth,
                                height: ScreenUtil().setHeight(50),
                                margin: EdgeInsets.only(left: 10,right: 10,bottom: 0,top:ScreenUtil().setHeight(25) ),
                                child: RaisedButton(
                                    color: Colors.white,
                                    child: Text("取消"),
                                    onPressed: () {
                                      Navigator.of(context).pop();
                                    }),
                              ),
                            ],
                          ),
                        ),
                      );
                    });
                  },
                  icon: Icon(Icons.share),
                ),
              );
            })
          ],
          title: Text(widget.title),
          leading: InkWell(
            child: Icon(Icons.chevron_left),
            onTap: () {
              Navigator.of(context).pop();
            },
          ),
        ),
      ),
      body: widget.child,
      backgroundColor: Color(0xFFF1F1F1),
      bottomNavigationBar: widget.bottomBtn,
    );
  }
}

效果:2

Flutter 底部弹出动画可以通过使用 BottomSheet widget 和 AnimatedContainer widget 来实现。 首先,创建一个 StatefulWidget,包含一个 bool 变量用于控制 BottomSheet 的显示和隐藏。 ``` class BottomSheetDemo extends StatefulWidget { @override _BottomSheetDemoState createState() => _BottomSheetDemoState(); } class _BottomSheetDemoState extends State<BottomSheetDemo> { bool _isVisible = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Bottom Sheet Demo'), ), body: Center( child: RaisedButton( child: Text('Show Bottom Sheet'), onPressed: () { setState(() { _isVisible = true; }); }, ), ), bottomSheet: _isVisible ? Container( decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), blurRadius: 5.0, spreadRadius: 1.0, offset: Offset(0.0, -1.0), ), ], ), child: SafeArea( child: AnimatedContainer( duration: Duration(milliseconds: 300), height: _isVisible ? 200.0 : 0.0, child: Center( child: Text('This is a Bottom Sheet'), ), ), ), ) : null, ); } } ``` 在上面的代码中,我们使用了一个 RaisedButton 来触发 Bottom Sheet 的显示,当用户点击按钮后,我们将 _isVisible 变量设置为 true,Bottom Sheet 就会显示出来。 Bottom Sheet 的内容是一个 AnimatedContainer,它的高度可以通过修改 _isVisible 变量来控制。在 AnimatedContainer 中,我们设置了一个动画时长为 300 毫秒,当 _isVisible 变量变化时,高度会从 0.0 到 200.0 进行动画过渡。 在 Bottom Sheet 的外部,我们使用了一个 Container 来包装它,并设置了一些阴影效果和背景颜色。我们还使用了 SafeArea 来确保 Bottom Sheet 不会被设备的导航栏遮挡。 通过这种方式,我们可以很容易地实现一个底部弹出动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值