【发布时间】:2021-01-14 01:39:21
【问题描述】:
我在从其他类访问 Flutter 中的对象(或状态)实例时遇到问题。我在网上尝试了很多类似的问题,目前正在使用“GlobalKey”,但我无法让它工作。
我正在尝试制作一个简单的 Flutter 应用程序,在按下按钮时,可以从另一个类访问小部件的状态:
import 'viewer.dart' as viewer;
(...)
onPressed: () {
//Works
print("Doing something");
//Doesn't work
viewer.key.currentState.nextPage();
},
我的 viewer.dart 文件看起来包含一个 PageController,以及一个包含该控制器的类:
final key = new GlobalKey<_RegistryState>();
final PageController _controller = PageController(
initialPage: 0,
);
class Registry extends StatefulWidget {
Registry({ Key key }) : super(key: key);
@override
_RegistryState createState() => _RegistryState();
}
class _RegistryState extends State<Registry> {
void next() {
print("Doing something!");
_controller.nextPage();
}
@override
Widget build(BuildContext context) {
return PageView(
//physics: NeverScrollableScrollPhysics(), //Disable user manually scrolling
controller: _controller,
children: [
registry_screens.ScreenSplash(),
registry_screens.ScreenName(),
Text("Bye"),
],
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
这个想法是,只要按下按钮,PageController 就会移动到下一页(已经存在,我可以通过在屏幕上滑动手动滚动到它)。
应用程序编译正常,但按下按钮时出现错误“NoSuchMethodError: invalid member on null: 'next'”。
我是否使用正确的方法来访问小部件(或状态)的实例?
【问题讨论】:
-
你的问题让我相信你对状态有核心误解。一个小部件不应该“直接访问”另一个小部件的状态。相反,我们把它留给一个小部件来为它下面的人提供函数,告诉他们如何修改父级的状态。基本上我建议非常仔细地阅读this
-
@DrSatan1 看来你是对的,我会好好看看基础知识