【发布时间】:2020-10-04 19:45:24
【问题描述】:
TL;DR:我正在尝试将函数列表传递给另一个类,然后它应该执行每个函数。
为什么? 我需要在 Flutter 中响应 App Intents。我的想法是将该逻辑分离到另一个小部件中,然后将其传递给函数列表。 App 注册 onResume 事件后,应该执行相应的功能。
怎么做? 目前,我的模型如下所示:
class LifecycleMethods {
final List<void> onPaused;
final List<void> onResumed;
final List<void> onInactive;
final List<void> onSuspending;
LifecycleMethods(
{this.onPaused, this.onInactive, this.onResumed, this.onSuspending});
}
传递给这个类:(灵感来自this article)
class AppStateObserver extends StatefulWidget {
final Widget child;
final LifecycleMethods lifecycleMethods;
const AppStateObserver({Key key, @required this.child, this.lifecycleMethods})
: super(key: key);
@override
_AppStateObserverState createState() => _AppStateObserverState();
}
class _AppStateObserverState extends State<AppStateObserver>
with WidgetsBindingObserver {
final Widget child;
final LifecycleMethods lifecycleMethods;
_AppStateObserverState({@required this.child, this.lifecycleMethods});
@override
Widget build(BuildContext context) => child;
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.paused) {
// Execute every item in lifecycleMethods.onPaused
}
}
}
WidgetBindingObserver 似乎是访问 App 生命周期的唯一方法。我将方法存储在生命周期方法变量中。在 didChangeAppLifecycleState 内部,它应该最终执行相应的函数。
现在 - 如何正确执行列表中的函数?这甚至可能吗? 请纠正我,如果有更清洁,更好的方法来解决这个问题!
谢谢
【问题讨论】:
-
可以使用
List类的forEach方法。 doc 。你会发现使用它的例子。 -
@dev-aentgs 看到了,试过了。但这并不能解决我执行列表项的问题。例如。使用
forEach((element) { element(); })不起作用。 -
使用
lifecycleMethods.onPaused.forEach((e) { e(); })会抛出什么错误? -
检查@ZeRj 的答案。
标签: list function flutter dart execute