flutter好用的轮子推荐九-flutter可定制的上下滑出抽屉

前言

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。

IT界著名的尼古拉斯·高尔包曾说:轮子是IT进步的阶梯!热门的框架千篇一律,好用轮子万里挑一!Flutter作为这两年开始崛起的跨平台开发框架,其第三方生态相比其他成熟框架还略有不足,但轮子的数量也已经很多了。本系列文章挑选日常app开发常用的轮子分享出来,给大家提高搬砖效率,同时也希望flutter的生态越来越完善,轮子越来越多。

本系列文章准备了超过50个轮子推荐,工作原因,尽量每1-2天出一篇文章。

tip:本系列文章合适已有部分flutter基础的开发者,入门请戳:flutter官网

正文

轮子

  • 轮子名称:slide_up_panel
  • 轮子概述:flutter可定制的上下滑出抽屉.
  • 轮子作者:akshath.r.jain@gmail.com
  • 推荐指数:★★★★
  • 常用指数:★★★★
  • 效果预览:

若图片无法加载,可访问原图:原图GIF

安装

dependencies:
  sliding_up_panel: ^0.3.6

import 'package:sliding_up_panel/sliding_up_panel.dart';

基本使用

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("SlidingUpPanelExample"),
    ),
    body: SlidingUpPanel(
      panel: Center(
        child: Text("这里是抽屉区"),
      ),
      body: Center(
        child: Text("这么是页面区"),
      ),
    ),
  );
}

参数配置

通过选项可以实现更多控制:

实践:仿头条小视频的评论抽屉

class ToutiaoDemo extends StatefulWidget {
ToutiaoDemo({Key key}) : super(key: key);
@override
_ToutiaoDemoState createState() => _ToutiaoDemoState();
}
class _ToutiaoDemoState extends State<ToutiaoDemo> {
PanelController panel = new PanelController();
double offsetDistance = 0.0;
double offsetY=0;
@override
Widget build(BuildContext context) {
return Container(
child: SlidingUpPanel(
controller:panel,
minHeight: 0,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(24.0),
topRight: Radius.circular(24.0),
),
body: GestureDetector(
child: new ConstrainedBox(
constraints: BoxConstraints.expand(),
child: new Image.asset(
"assets/img1.jpg",
fit: BoxFit.fill,
),
),
onTap: (){
panel.close();
},
onVerticalDragDown: (details){
// print(details.globalPosition.dy);
                        offsetDistance=details.globalPosition.dy;
},
onVerticalDragUpdate: (details){
offsetY=details.globalPosition.dy-offsetDistance;
if(offsetY>0){
print("向下"+offsetY.toString());
}else{
print("向上"+offsetY.toString());
double position=offsetY.abs()/300;
position=position>1?1:position;
panel.setPanelPosition(position);
if(position>0.4){
panel.open();
}
}
},
),
panel: Container(
child: Center(
child: Text("评论区",style: TextStyle(color: Colors.grey,fontSize: 16,fontWeight: FontWeight.normal,decoration:TextDecoration.none)),
),
),
),
);
}
}

效果图:

结尾

Share