【问题标题】:Access Variable form another class in top level function Flutter从顶级函数 Flutter 中的另一个类访问变量
【发布时间】:2022-11-22 23:29:23
【问题描述】:

我的 flutter 应用程序中有一个后台通知处理程序,它是一个顶级函数,如下所示:

Future<void> _onBackgroundMessage(RemoteMessage message) async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  final chatClient = StreamChatClient(STREAM_API_KEY);

  print(Utils.user?.uid);
  print(Utils.user?.streamToken);

  chatClient.connectUser(
    su.User(id: Utils.user?.uid ?? ''),
    Utils.user?.streamToken ?? '',
    connectWebSocket: false,
  );

  NotificationUtils.handleGetStreamNotification(message, chatClient);

  SharedPreferences prefs = await SharedPreferences.getInstance();
  int appBadgeCounter = prefs.getInt(appBadgePrefsKey) ?? 0;
  FlutterAppBadger.updateBadgeCount(appBadgeCounter + 1);
}

在通知处理程序中,我需要使用 uid 和令牌连接到单独的服务器。我有一个 Utils 单例类,我在其中将应用程序用户存储为变量。我在我的主页有状态小部件类中初始化这个 Utils 应用程序变量,并在整个应用程序中保留它。这样,我可以最大限度地减少对用户数据的数据库调用次数。

但是,在这个顶级通知处理程序中,Utils.user 始终为空。这个顶级函数存在于我的主页有状态小部件类中,但它仍然是一个顶级函数。

我想避免为应用程序收到的每个通知调用数据库。有没有办法得到这个Utils。用户数据不为空??

【问题讨论】:

    标签: flutter push-notification


    【解决方案1】:

    您必须在 chatClient.connectUser 中使用它之前先设置用户,并且您可以检查用户是否为空,如果为空则初始化它然后它停止不会进行额外的调用。

     Future<void> _onBackgroundMessage(RemoteMessage message) async {
      ...
      await Firebase.initializeApp();
      final chatClient = StreamChatClient(STREAM_API_KEY);
      
       if(Utils.user != null) {
          Utils.setUser(); 
       }
    
      print(Utils.user?.uid);
      print(Utils.user?.streamToken);
      ...
     
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2021-11-11
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多