使用GlobalKey从另一个类的颤振更改状态

问题描述 投票:0回答:1

我有一个底页,它的子级可以更改。我正在尝试使用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]
      ),
    );
  }
}

Child:

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);
         });
        },
      ),
    );
  }
}
flutter flutter-layout
1个回答
0
投票

您在selectChildren类中将selectedChild输错了_ServicePackageState

© www.soinside.com 2019 - 2024. All rights reserved.