【问题标题】:flutter can't access static variable颤振无法访问静态变量
【发布时间】:2021-12-04 19:43:21
【问题描述】:

我想快速访问有状态小部件中的静态变量。 但它不起作用。 有人说这是一个私人小部件,我无法访问它。 那么如何在下面的代码中访问变量isCollapsed

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 var isCollapsed = false;
 @override
  Widget build(BuildContext context) {
 Scaffold(
        body: SlidingUpPanel(
          controller: _pc,
          panelBuilder: (sc) {
            if (isCollapsed == false) _pc.hide();
            if (isCollapsed == true) _pc.show();
            return Container(
              child: Center(child: Text("Panel")),
            );
          },
          body: Text("something");
        ),  }
}

我想在另一个类中更改 isCollapsed, 当点击图标时,isCollapsed 变为 true。

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: () {
                               
         },
          icon: SvgPicture.asset(play),
                            ),
                          );}}

谁能帮帮我,请问我该怎么做?

【问题讨论】:

  • 你应该使用 changeNotifier Provider 来实现。

标签: flutter dart variables static flutter-onpressed


【解决方案1】:

是的,_BottomNavBarState 是私有的,因为它以下划线_ 开头。如果您想公开,请从名称中删除_,它会像


  @override
  BottomNavBarState createState() => BottomNavBarState();
}

class BottomNavBarState extends State<BottomNavBar> {
  static var isCollapsed = false;
  

并使用BottomNavBarState.isCollapsed 之类的任何地方,但我更喜欢state-management,而变量对状态有影响。

了解更多

【讨论】:

  • 我可以用这个吗? BottomNavBarState.isCollapsed == true;
  • 感谢分享链接。其实我不太了解状态管理
  • 我用这个:onPressed: () { BottomNavBarState.isCollapsed = true;}, 但它实际上也不起作用。
  • 因为我们没有更新状态,是的,它只是改变了值,这就是我们需要处理状态的原因,使用 setState() 可能会有所帮助,考虑学习像 @987654331 这样的状态管理@ ,provider,riverpod,bloc+.......检查那个链接你会得到它。
猜你喜欢
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 2012-06-29
  • 2020-02-27
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多