Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 可滚动的颤振弹出菜单_Dart_Flutter - Fatal编程技术网

Dart 可滚动的颤振弹出菜单

Dart 可滚动的颤振弹出菜单,dart,flutter,Dart,Flutter,我试图使用颤振弹出菜单按钮,但我似乎不能使它更小的滚动 这可行吗?还是我使用了错误的小部件 下面的图片作为参考,只想显示前4/5个项目,并滚动显示其余项目 提前谢谢 您可以创建自己的弹出窗口小部件 一张卡片包装在一个动画容器中,具有特定的尺寸和内部的列表视图 使用堆栈和定位小部件将此小部件放置在屏幕上,使其位于右上方其他元素的上方 类CustomPopup扩展StatefulWidget{ 自定义弹出窗口({ @需要这个节目, @需要此项, @需要此.builder函数, }); 最后的布尔秀

我试图使用颤振弹出菜单按钮,但我似乎不能使它更小的滚动

这可行吗?还是我使用了错误的小部件

下面的图片作为参考,只想显示前4/5个项目,并滚动显示其余项目

提前谢谢


您可以创建自己的弹出窗口
小部件

一张
卡片
包装在一个
动画容器
中,具有特定的尺寸和内部的
列表视图

使用
堆栈
定位
小部件将此小部件放置在屏幕上,使其位于右上方其他元素的上方

类CustomPopup扩展StatefulWidget{
自定义弹出窗口({
@需要这个节目,
@需要此项,
@需要此.builder函数,
});
最后的布尔秀;
最后清单项目;
最终函数(BuildContext上下文、动态项)builderFunction;
@凌驾
_CustomPopupState createState()=>\u CustomPopupState();
}
类_CustomPopupState扩展状态{
@凌驾
小部件构建(构建上下文){
后台返回(
后台:!widget.show,
子:动画容器(
持续时间:持续时间(毫秒:300),
高度:widget.show?MediaQuery.of(context).size.height/3:0,
宽度:MediaQuery.of(context).size.width/3,
孩子:卡片(
标高:3,
子项:MediaQuery.removePadding(
上下文:上下文,
removeTop:没错,
子项:ListView.builder(
滚动方向:轴垂直,
itemCount:widget.items.length,
itemBuilder:(上下文,索引){
Widget item=Widget.builder函数(
上下文
widget.items[索引],
);
退货项目;
},
),
),
),
),
);
}
}
返回堆栈(
儿童:[
容器(
颜色:Colors.blueAccent,
),
定位(
右:0,,
排名:60,
子:自定义弹出窗口(
show:shouldShow,
项目:[1,2,3,4,5,6,7,8],
builderFunction:(上下文,项){
返回列表块(
标题:文本(item.toString()),
onTap:(){}
);
},
),
),
],
);

您可以通过两种方式创建它:第一种是
弹出菜单按钮
小部件,第二种是
弹出菜单

class HomePage extends StatefulWidget {

@凌驾 _HomepageState createState()=>\u HomepageState(); }

类_HomepageState扩展状态{

列表项=[1,2,3,4,5,6,7,8,9,10,11,12,13]

@凌驾 小部件构建(构建上下文){

返回脚手架(主体:中心)(
孩子:弹出菜单按钮(
子:图标(图标。添加购物车),
偏移量:偏移量(-1.0,-220.0),
海拔:0,
颜色:颜色。透明,
形状:RoundedRectangleBorder(borderRadius:borderRadius.all(Radius.circular(10)),
itemBuilder:(上下文){
返回[
PopupMenuItem(
子:容器(
装饰:造型装饰(
颜色:颜色,白色,
形状:圆形矩形边框(
边界半径:边界半径。圆形(10)),
子:滚动条(
子项:ListView.builder(
填充:仅限边缘设置(顶部:20),
itemCount:items.length,
itemBuilder:(上下文,索引){
最终交易=项目[索引];
返回列表块(
标题:正文(
trans.toString(),
样式:TextStyle(
尺寸:16,
),
),
onTap:(){
//你想做什么?
},
);
},
),
),
身高:250,
宽度:500,
),
)
];
}),
)
您还可以通过减少或增加容器的高度来调整要显示的项目数。为了以防万一,我还添加了一个滚动条

return Scaffold(body: Center(
  child: PopupMenuButton(
      child: Icon(Icons.add_shopping_cart),
      offset: Offset(-1.0, -220.0),
      elevation: 0,
      color: Colors.transparent,
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10))),
      itemBuilder: (context) {
        return <PopupMenuEntry<Widget>>[
          PopupMenuItem<Widget>(
            child: Container(
              decoration: ShapeDecoration(
                  color: Colors.white,
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(10))),
              child: Scrollbar(
                child: ListView.builder(
                  padding: EdgeInsets.only(top: 20),

                  itemCount: items.length,
                  itemBuilder: (context, index) {
                    final trans = items[index];
                    return ListTile(

                      title: Text(
                        trans.toString(),
                        style: TextStyle(
                          fontSize: 16,

                        ),
                      ),

                      onTap: () {
                        //what would you like to do?
                      },
                    );
                  },
                ),
              ),
              height: 250,
              width: 500,
            ),
          )
        ];
      }),
)