|
@@ -0,0 +1,104 @@
|
|
|
+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
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|