什么相当于 Flutter ExpandablePanel 的 onExpansionChanged
What is the equivalent of onExpansionChanged for Flutter ExpandablePanel
我想在我的 ExpandablePanel 展开时调用一个函数,使用 ExpansionTile 我使用 onExpansionChanged 执行此操作 但这里我不想使用 ExpansionTile,
没有人有解决办法吗?
谢谢。
您可以将 ExpansionPanel 放在 ExpansionPanelList 中,里面会有一个名为 的 属性 expansionCallback
您可以用 ExpansionPanelList 包装 ExpansionPanel,这样您就可以访问名为 expansionCallback 的回调函数。看看下面的片段:
ExpansionPanelList(
animationDuration: const Duration(milliseconds:1000),
children: [
ExpansionPanel(), //..your expansionPanel here
],
expansionCallback: (int item, bool status) {
//status is what you're looking for
},
),
使用 ExpandableController
和 ExpandableNotifier
:
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() => _MyWidget();
}
class _MyWidget extends State<MyWidget> {
final ExpandableController expandableController = ExpandableController();
void onExpandableControllerStateChanged() {
if (expandableController.expanded) {
// Do your stuff when panel got expanded here
} else {
// Do your stuff when panel got collapsed here
}
}
@override
void initState() {
super.initState();
expandableController.addListener(onExpandableControllerStateChanged);
}
@override
void dispose() {
expandableController.removeListener(onExpandableControllerStateChanged);
super.dispose();
}
@override
Widget build(BuildContext context) {
return ExpandableNotifier(
controller: expandableController,
child: ExpandablePanel(
header: HeaderWidget(),
collapsed: CollapsedWidget(),
expanded: ExpandedWidget(),
),
);
}
}
我想在我的 ExpandablePanel 展开时调用一个函数,使用 ExpansionTile 我使用 onExpansionChanged 执行此操作 但这里我不想使用 ExpansionTile,
没有人有解决办法吗?
谢谢。
您可以将 ExpansionPanel 放在 ExpansionPanelList 中,里面会有一个名为 的 属性 expansionCallback
您可以用 ExpansionPanelList 包装 ExpansionPanel,这样您就可以访问名为 expansionCallback 的回调函数。看看下面的片段:
ExpansionPanelList(
animationDuration: const Duration(milliseconds:1000),
children: [
ExpansionPanel(), //..your expansionPanel here
],
expansionCallback: (int item, bool status) {
//status is what you're looking for
},
),
使用 ExpandableController
和 ExpandableNotifier
:
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() => _MyWidget();
}
class _MyWidget extends State<MyWidget> {
final ExpandableController expandableController = ExpandableController();
void onExpandableControllerStateChanged() {
if (expandableController.expanded) {
// Do your stuff when panel got expanded here
} else {
// Do your stuff when panel got collapsed here
}
}
@override
void initState() {
super.initState();
expandableController.addListener(onExpandableControllerStateChanged);
}
@override
void dispose() {
expandableController.removeListener(onExpandableControllerStateChanged);
super.dispose();
}
@override
Widget build(BuildContext context) {
return ExpandableNotifier(
controller: expandableController,
child: ExpandablePanel(
header: HeaderWidget(),
collapsed: CollapsedWidget(),
expanded: ExpandedWidget(),
),
);
}
}