【发布时间】:2021-12-04 23:38:43
【问题描述】:
我有这门课:
class BottomNavBar extends StatefulWidget {
final int activeTabIndex;
const BottomNavBar({Key? key, required this.activeTabIndex})
: super(key: key);
@override
BottomNavBarState createState() => BottomNavBarState();
}
class BottomNavBarState extends State<BottomNavBar> {
static bool isCollapsed = false;
@override
Widget build(BuildContext context) {
Scaffold(
body: SlidingUpPanel(
controller: _pc,
panelBuilder: (sc) {
setState(() {
isCollapsed ? _pc.show(): _pc.hide();
});
return Container(
child: Center(child: Text("Panel")),
);
},
body: Text("something");
), }
}
我想改变这个类中变量isCollapsed的值:
class _PlayerPreviewState extends State<PlayerPreview> {
@override
Widget build(BuildContext context) {
final String play = 'assets/icons/play.svg';
var pageWidth = MediaQuery.of(context).size.width;
return Padding(
padding: EdgeInsets.only(top: pageWidth * .04),
child: IconButton(
onPressed: () {
BottomNavBarState.isCollapsed = true;
},
icon: SvgPicture.asset(play),
),
);}}
我想在点击 IconButton 时,isCollapsed 改为 true。
当我打印 BottomNavBarState.isCollapsed 时,打印 true 及其变化。
但在 BottomNavBarState 中不会改变。而这部分 -> if (isCollapsed == true) _pc.show(); 不起作用。
我知道我应该与报表管理器一起做,但我不知道他们。
所以有人可以帮帮我吗?如何更改 isCollaps 并运行 _pc.show()
【问题讨论】:
-
为什么是
isCollapsedstatic? -
我自己也在学习 Flutter,我觉得你从
panelBuilder闭包中调用_pc上的方法是不对的。相反,我希望您最好使用_pc(不管它是什么)的工厂方法,如下所示:controller: isCollapsed ? PCThing.hidden() : PCThing.shown(),。这个想法是您为小部件的当前状态返回一个处于静态状态的对象。 -
正如a comment to your other question 所解释的,您需要调用
setState以触发您的Widget使用更新后的值进行重建。 -
我使用静态是因为我想在另一个类中使用它。 @trojanfoe
-
好的,我应该在代码中哪里使用
setState? @jamesdlin
标签: flutter dart variables slideshow flutter-onpressed