在应用程序中显示用户在线或离线的最佳方式是什么?前端-〉扑动后端-〉Firestore云和Firebase身份验证我在Firestore中有一个包含文档的用户集合。每个文档都是一个用户,并包含status字段。在Flutter中,我可以在用户每次登录或注销时更新此字段,但如果您关闭应用程序,则不会更新。
status
mwkjh3gx1#
您可以使用WidgetsBindingObserver扩展statefulWidget State类,例如
WidgetsBindingObserver
class _HomePageState extends State<HomePage> with WidgetsBindingObserver
并且initState方法加上WidgetsBinding.instance.addObserver(this);。
initState
WidgetsBinding.instance.addObserver(this);
@override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); }
稍后覆盖didChangeAppLifecycleState方法
didChangeAppLifecycleState
@override void didChangeAppLifecycleState(AppLifecycleState state) { if (state == AppLifecycleState.resumed) //TODO: set status to online here in firestore else //TODO: set status to offline here in firestore }
k97glaaz2#
它可以通过**小部件绑定观察者()**完成;
class _HomeState extends State<Home> with WidgetsBindingObserver {...}
先初始化它
@override void initState() { super.initState(); WidgetsBinding.instance!.addObserver(this); }
添加此函数以侦听应用状态后didChangeAppLifecycleState()
String? changes; @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); final isBg = state == AppLifecycleState.paused; final isClosed = state == AppLifecycleState.detached; final isScreen = state == AppLifecycleState.resumed; isBg || isScreen == true || isClosed == false ? setState(() { // SET ONLINE }) : setState(() { //SET OFFLINE }); print('CHANGES IS : $changes ');
}
字符串?变化包含您的应用程序状态!高兴你可以什么你想要的,这可以通知在线状态像Whatsapp Messenger!
我的代码:
isBg || isScreen == true || isClosed == false ? setState(() { changes = "User is online" }) : setState(() { changes = "User is Offline" }); print('CHANGES IS : $changes ');
zrfyljdw3#
你可以抓住一个错误。您必须将源更改为服务器源:源服务器第一个月
final FirebaseFirestore _firestore = FirebaseFirestore.instance; final CollectionReference users = _firestore.collection('users'); users.get(GetOptions(source: Source.server)) .then((QuerySnapshot querySnapshot) { querySnapshot.docs.forEach((doc) { print(doc["first_name"]); print(doc["last_name"]); print(doc["gender"]); print(doc["phone_number"]); }); }).onError((error, stackTrace) { print(error.toString());//Offline Global.showSnackBar(context, error.toString(), false); });
3条答案
按热度按时间mwkjh3gx1#
您可以使用
WidgetsBindingObserver
扩展statefulWidget State类,例如并且
initState
方法加上WidgetsBinding.instance.addObserver(this);
。稍后覆盖
didChangeAppLifecycleState
方法k97glaaz2#
它可以通过**小部件绑定观察者()**完成;
先初始化它
添加此函数以侦听应用状态后didChangeAppLifecycleState()
}
字符串?变化包含您的应用程序状态!高兴你可以什么你想要的,这可以通知在线状态像Whatsapp Messenger!
我的代码:
zrfyljdw3#
你可以抓住一个错误。
您必须将源更改为服务器源:源服务器
第一个月