Flutter - Collapsing ExpansionTile after choosing an item

后端 未结 6 1410
傲寒
傲寒 2020-11-27 20:04

I\'m trying to get ExpansionTile to collapse after I choose an item, but it does not close the list that was opened.

I tried to use the onExpansio

6条回答
  •  庸人自扰
    2020-11-27 20:54

    I've made a TreeView widget. It uses ExpansionTile to simulate the hierarchy. Each ExpansionTile could host a collection of ExpansionTile which can host ...etc.

    Everything worked fine until I wanted to add 2 features : expand all / collapse all. What helped me to overcame this problem is the GlobalKey.

    My TreeView widget, is hosted in a page and is used with a global key. I expose a VoidCallback. The implementation sets a new key in the setState method.

    // TreeView host page
    GlobalKey _key = GlobalKey();
    void redrawWidgetCallback() {
        setState(() {
          // Triggers a rebuild of the whole TreeView.
          _key = GlobalKey();
        });
    }
    [...]
    // In the Scaffold body :
    TreeView(
        key: _key,
        treeViewItems: widget.treeViewItems,
        redrawWidgetCallback: redrawWidgetCallback,
      )
    

    Then in my collapse/expand method in the widget, at the end, I call widget.redrawWidgetCallback. No need to deal with a key for each level of the treeView : the root element widget is enough.

    It may have perf issues / not the right way to go. But since my TreeView won't be used with more than 50 nodes, it's ok for me until I found a better solution which doesn't involve to create an ExpandableTile because I believe this behavior will be available oneday on the ExpansionTile itself.

    PS : notice that this workaround doesn't run the expand animation.

提交回复
热议问题