如何在 flutter 中从另一个 statefull class 调用函数?
How to call a function from another statefull class in flutter?
我正在学习 flutter,我想将一个函数(在 statefull class 中)调用到另一个 statefull class 中。我到处搜索,但没有可靠的解决方案。任何人都可以建议或提供调用该函数的正确方法吗?
试试下面的代码希望对你有帮助:
用你的函数声明第一个有状态 class :
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(),
);
}
}
然后在其他有状态 class 中调用 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(),
);
}
}
您需要访问 State 的实例才能调用其函数之一。在不知道您的用例的情况下,您可以创建一个控制器 class.
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(),
),
]
)
我正在学习 flutter,我想将一个函数(在 statefull class 中)调用到另一个 statefull class 中。我到处搜索,但没有可靠的解决方案。任何人都可以建议或提供调用该函数的正确方法吗?
试试下面的代码希望对你有帮助:
用你的函数声明第一个有状态 class :
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(),
);
}
}
然后在其他有状态 class 中调用 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(),
);
}
}
您需要访问 State 的实例才能调用其函数之一。在不知道您的用例的情况下,您可以创建一个控制器 class.
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(),
),
]
)