我正在学习颤振,我想将一个函数(在有状态类中)调用到另一个有状态类中。我到处搜索,但没有可靠的解决方案。任何人都可以建议或提供我调用该函数的正确方法吗?
问问题
49 次
2 回答
0
试试下面的代码希望它对你有帮助:
用你的函数声明第一个有状态的类:
class MobileGraph extends StatefulWidget {
_MobileGraphState mobileGraph = _MobileGraphState();
@override
_MobileGraphState createState() => mobileGraph;
mobileGraphFunction() {
mobileGraph.mobileGraphFunction();
}
}
class _MobileGraphState extends State<MobileGraph> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: mobileGraphFunction(),
);
}
}
然后在其他有状态类中调用 mobileGraphFunction,例如:
class Graph extends StatefulWidget {
@override
_GraphState createState() => _GraphState();
}
class _GraphState extends State<Graph> {
MobileGraph mobileGraph;
@override
void initState() {
super.initState();
mobileGraph = MobileGraph();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'All Graphs',
style: TextStyle(fontSize: 25),
),
),
body: mobileGraph(),
);
}
}
于 2021-08-02T11:18:38.673 回答
0
您需要访问 State 的实例才能调用其功能之一。在不知道您的用例的情况下,您可以创建一个控制器类。
class CounterController {
late Function increment();
late Function decrement();
}
然后将其作为参数传递给您的 Widget。
class CounterWidget extends StatefulWidget {
final CounterController? controller;
CounterWidget({this.controller});
}
然后分配initState
.
class CounterWidgetState extends State<CounterWidget> {
int count = 0;
@override
void initState() {
widget.controller?.increment = increment;
widget.controller?.decrement = decrement;
}
void increment() {
setState(() => count++);
}
void decrement() {
setState(() => count--);
}
}
然后终于可以调用函数了。
Row(
children: [
CounterWidget(controller: counterController),
TextButton(
child: const Text('+'),
onPressed: () => counterController.increment(),
),
TextButton(
child: const Text('-'),
onPressed: () => counterController.decrement(),
),
]
)
于 2021-08-02T11:35:40.353 回答