123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- part of cool_ui;
- class CupertinoPopoverMenuList extends StatelessWidget{
- final List<Widget> children;
- const CupertinoPopoverMenuList({this.children});
- @override
- Widget build(BuildContext context) {
- return ListView.builder(
- itemCount: children.length * 2 - 1,
- itemBuilder: (context,int i){
- if(i.isOdd){
- // 在每一列之前,添加一个1像素高的分隔线widget
- return const Divider(height: 1.0,);
- }
- final int index=i ~/2;
- return children[index];
- },
- padding: EdgeInsets.all(0.0),
- );
- }
- }
- class CupertinoPopoverMenuItem extends StatefulWidget{
- final Widget leading;
- final Widget child;
- final VoidCallback onTap;
- final bool isTapClosePopover;
- const CupertinoPopoverMenuItem({
- this.leading,
- this.child,
- this.onTap,
- this.isTapClosePopover=true
- });
- @override
- State<StatefulWidget> createState() =>CupertinoPopoverMenuItemState();
- }
- class CupertinoPopoverMenuItemState extends State<CupertinoPopoverMenuItem>{
- bool isDown = false;
- @override
- Widget build(BuildContext context) {
- List<Widget> widgets = [];
- if(widget.leading != null){
- widgets.add(Container(
- padding: EdgeInsets.only(left:5.0,right: 5.0),
- width: 35.0,
- height: 35.0,
- child: IconTheme(
- data:IconThemeData(color: Color(0xff007aff),size: 20.0),
- child: widget.leading
- ),
- ));
- }
- widgets.add(Expanded(child: DefaultTextStyle(style: TextStyle(
- color: Color(0xff007aff),
- fontSize: 17.0
- ), child: widget.child)));
- return GestureDetector(
- onTapDown: (detail){
- setState(() {
- isDown = true;
- });
- },
- onTapUp: (detail){
- if(isDown){
- setState(() {
- isDown = false;
- });
- if(widget.onTap != null){
- widget.onTap();
- }
- if(widget.isTapClosePopover){
- Navigator.of(context).pop();
- }
- }
- },
- onTapCancel: (){
- if(isDown){
- setState(() {
- isDown = false;
- });
- }
- },
- child: Container(
- color:isDown?Color(0xFFd9d9d9):Colors.white,
- child: Padding(
- padding: EdgeInsets.only(top:2.5,bottom: 2.5),
- child: Row(
- children: widgets
- ),
- ),
- ),
- );
- }
- }
|