【问题标题】:How can I change the header when the ExpandablePanel is opened打开 ExpandablePanel 时如何更改标题
【发布时间】:2022-01-19 07:55:36
【问题描述】:

我想在 ExpandablePanel 打开时更改标题部分。当我关闭它时,旧标题应该会再次出现。如何在 Flutter 中做到这一点?

true false 值为 true 但文本未更新

return ExpandableNotifier(
          controller: expandableController,
          child: ExpandablePanel(
            header: Padding(
              padding: const EdgeInsets.only(left: 15.0, top: 15.0),
              child: Text(expandableController.expanded
                  ? "${itemCount} kalemi gizlemek için tıklayınız..."
                  : "${itemCount} kalem daha var görmek için tıklayınız..."),
            ),
            collapsed: detayCard(detay, h),
            expanded: detayCard(detay, maxheight),
          ),
        );

  final ExpandableController expandableController = ExpandableController();


  void onExpandableControllerStateChanged() {
    if (expandableController.expanded) {
      print(expandableController.expanded);
    } else {
      print(expandableController.expanded);
    }
  }

  @override
  void initState() {
    super.initState();
    expandableController.addListener(onExpandableControllerStateChanged);

  }
  
  
    @override
  void dispose() {
    expandableController.removeListener(onExpandableControllerStateChanged);
    super.dispose();
  }

【问题讨论】:

    标签: flutter expandable


    【解决方案1】:

    您可以尝试将controller 添加到您的ExpandablePanel,每个文档的控制器都有这个

      /// Returns [true] if the state is expanded, [false] if collapsed.
      bool get expanded => value;
    

    这样您就可以通过检查面板的状态来更改您的header,例如

    Text(controller.expanded ? 'Expanded' : 'Collapsed')
    

    编辑:

    例子

    class MyHomePage extends StatefulWidget {
      const MyHomePage({
        Key? key,
      }) : super(key: key);
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      final ExpandableController _controller = ExpandableController();
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: SafeArea(
            child: ExpandablePanel(
              controller: _controller
                ..addListener(() {
                  setState(() {});
                }),
              header: Text(
                _controller.expanded ? 'Header expanded' : 'Header collapsed',
                key: ValueKey(_controller.expanded),
              ),
              expanded: Container(
                width: MediaQuery.of(context).size.width,
                height: 250,
                color: Colors.green,
              ),
              collapsed: Container(
                width: MediaQuery.of(context).size.width,
                height: 50,
                color: Colors.red,
              ),
            ),
          ),
        );
      }
    }
    

    以上结果:

    【讨论】:

    • 我试过了,但没用,我想我错过了什么。你能举一个详细的例子吗?另外,非常感谢您的回复。
    • 检查编辑后的答案
    • 那么当我将它发送到另一个页面时,我该怎么做才能使这个小部件以相同的方式工作?
    • 将整个东西变成一个不同的小部件,然后将该小部件(已经具有该功能)发送到不同的页面。
    • 非常感谢您的建议、时间和耐心。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2013-05-20
    相关资源
    最近更新 更多