0

我正在编写一个使用全局函数来处理 Pushy.me 通知的 Flutter 应用程序。此函数需要更新有状态小部件的状态。

我尝试使用全局密钥来访问小部件的当前状态,但它什么也没做。我试过一个 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();
}
4

1 回答 1

0

您可以尝试为此使用事件,使用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");
    });
  }

...
于 2022-02-11T21:01:15.557 回答