2017-04-11 1 views
3

두 번째 위젯에서 팝업 메뉴를 열려면 어떻게해야합니까?PopupMenuButton을 여는 방법?

final button = new PopupMenuButton(
    itemBuilder: (_) => <PopupMenuItem<String>>[ 
      new PopupMenuItem<String>(
       child: const Text('Doge'), value: 'Doge'), 
      new PopupMenuItem<String>(
       child: const Text('Lion'), value: 'Lion'), 
     ], 
    onSelected: _doSomething); 

final tile = new ListTile(title: new Text('Doge or lion?'), trailing: button); 

나는 tile을 두드리고하여 button의 메뉴를 엽니 다하고자합니다.

답변

1

이 작동하지만, 우아 (그리고 위의 라이너의 솔루션과 같은 디스플레이 문제가 : 나는 당신이 실제로 요구하는 것은 https://github.com/flutter/flutter/issues/254 또는 추적 무슨 같은 의심

class _MyHomePageState extends State<MyHomePage> { 
    final GlobalKey _menuKey = new GlobalKey(); 

    @override 
    Widget build(BuildContext context) { 
    final button = new PopupMenuButton(
     key: _menuKey, 
     itemBuilder: (_) => <PopupMenuItem<String>>[ 
       new PopupMenuItem<String>(
        child: const Text('Doge'), value: 'Doge'), 
       new PopupMenuItem<String>(
        child: const Text('Lion'), value: 'Lion'), 
      ], 
     onSelected: (_) {}); 

    final tile = 
     new ListTile(title: new Text('Doge or lion?'), trailing: button, onTap:() { 
      // This is a hack because _PopupMenuButtonState is private. 
      dynamic state = _menuKey.currentState; 
      state.showButtonMenu(); 
     }); 
    return new Scaffold(
     body: new Center(
     child: tile, 
    ), 
    ); 
    } 
} 

https://github.com/flutter/flutter/issues/8277 - 레이블을 컨트롤에 연결하고 레이블을 클릭 할 수있는 기능 - Flutter 프레임 워크에서 누락 된 기능입니다.

+0

감사합니다. 에릭! 감사합니다. 이러한 github 문제에 설명 된 위젯은 ~을 찾고 있었다. . – DogeLion

0

나는이 동작을 달성하는 방법이 없다고 생각합니다. 당신이 타일에 onTap 속성을 첨부 할 수 있지만, 당신은 당신이 취할 수있는 방법은 그들이 ListTiles처럼 쉽게 수정 및 편집을 할 수 있도록 구성되어 있기 때문에 ExpansionPanels을 사용하는 것입니다 '외부'

에서 MenuButton에 액세스 할 수 없습니다 .

0

질문에 대한 해결책을 찾았습니다. ListTile을 포함한 모든 위젯이 될 수있는 PopupMenuButton에 하위 항목을 제공 할 수 있습니다 (아래 코드 참조). 문제는 PopupMenu가 ListTile의 왼쪽에 열리는 것입니다.

final popupMenu = new PopupMenuButton(
    child: new ListTile(
    title: new Text('Doge or lion?'), 
    trailing: const Icon(Icons.more_vert), 
), 
    itemBuilder: (_) => <PopupMenuItem<String>>[ 
      new PopupMenuItem<String>(
       child: new Text('Doge'), value: 'Doge'), 
      new PopupMenuItem<String>(
       child: new Text('Lion'), value: 'Lion'), 
      ], 
    onSelected: _doSomething, 
)