我正在编写一个Flutter应用程序,该应用程序使用全局函数来处理Push.me通知。此函数需要更新有状态小部件的状态。
我尝试了一个全局键来访问小部件的当前状态,但它什么也没做。我试过一个Eventify发射器,发射器和听众似乎没有排好队。
import 'package:eventify/eventify.dart';
EventEmitter emitter = new EventEmitter();
GlobalKey<_WrapperScreenState> _key = GlobalKey<_WrapperScreenState>();
void backgroundNotificationListener(Map<String, dynamic> data) {
// Print notification payload data
print('Received notification: $data');
// Notification title
String notificationTitle = 'MyApp';
// Attempt to extract the "message" property from the payload: {"message":"Hello World!"}
String notificationText = data['message'] ?? 'Hello World!';
Pushy.notify(notificationTitle, notificationText, data);
emitter.emit('updateList',null,"");
try{
print(_key.currentState.test);
}
catch(e){
print(e);
}
// Clear iOS app badge number
Pushy.clearBadge();
}
class WrapperScreen extends StatefulWidget {
@override
_WrapperScreenState createState() => _WrapperScreenState();
}
您可以尝试使用事件,使用StreamController或事件总线包。您的有状态小部件将在全局事件总线上侦听,您可以激发一个事件,其中包含小部件本身用于更新状态的必要信息。
类似这样的东西(使用事件总线包(:
// main.dart
EventBus eventBus = EventBus();
class MyEvent {}
void somewhereGlobal() {
// trigger widget state change from global location
eventBus.fire(MyEvent());
}
void main() {
...
}
// my_stateful_widget.dart
...
class _MyWidgetState extends State<MyWidget> {
@override
void initState() {
super.initState();
eventBus.on<MyEvent>().listen((event) {
// update widget state
print("update widget state");
});
}
...