Flutter 使用 GlobalKey 从另一个类更改状态

Posted

技术标签:

【中文标题】Flutter 使用 GlobalKey 从另一个类更改状态【英文标题】:Flutter change state from another class using GlobalKey 【发布时间】:2020-05-18 18:44:30 【问题描述】:

我有一个底页,它有可以更改的子项。我正在尝试使用GlobalKey 从孩子那里访问父母的方法。它在下面抛出异常:

The following NoSuchMethodError was thrown while handling a gesture:
The method 'selectedChild' was called on null.
Receiver: null
Tried calling: selectedChild(1)

我只是想改变另一个类的状态。任何建议都会很棒。我怎样才能让它发挥作用?

家长:

class _ServicesModal extends StatefulWidget 
  @override
  ServicesModalState createState() => ServicesModalState();


class ServicesModalState extends State<_ServicesModal> 
  var selectedChild = 0;
  var _children = [
    ServicePackage(),
    Calls()
  ];

  selectChildren(int select) 
    setState(() 
      selectedChild = select;
    );
  

  @override
  Widget build(BuildContext context) 
    return Container(
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(20),
          topRight: Radius.circular(20),
        )
      ),
      child: ClipRRect(
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(20),
          topRight: Radius.circular(20),
        ),
        child: _children[selectedChild]
      ),
    );
  

孩子:

class ServicePackage extends StatefulWidget 

  GlobalKey<ServicesModalState> _serviceModalState = GlobalKey();

  @override
  _ServicePackageState createState() => _ServicePackageState();


class _ServicePackageState extends State<ServicePackage> 
  @override
  Widget build(BuildContext context) 
    return Container(
      child: IconButton(
        icon: Icon(Icons.add),
        onPressed: () 
         setState(() 
           widget._serviceModalState.currentState.selectedChild(1);
         );
        ,
      ),
    );
  

【问题讨论】:

检查这个答案可能会有所帮助***.com/a/56928670/10660823 【参考方案1】:

您在 _ServicePackageState 类中将 selectChildren 错误地输入为 selectedChild

【讨论】:

以上是关于Flutter 使用 GlobalKey 从另一个类更改状态的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:多个小部件使用相同的 GlobalKey

为啥 Flutter 文档在创建 Form 时要求使用 GlobalKey 而不是其他类型的键?

Flutter中GlobalKey的用法

flutter通过 GlobalKey 获取界面任意元素坐标尺寸

在小部件树中检测到 Flutter Duplicate GlobalKey

flutter通过GlobalKey在自定义Widget外部获取其state刷新页面