DidChangeAppLifecycleState не работает. Я проверил все остальные вопросы, связанные с этим, но это не помогло.
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
// TODO: implement didChangeAppLifecycleState
UpPrint(name: "CheckUserStatus", value: "Before");
print(state);
UpPrint(name: "CheckUserStatus", value: "After");
if (state == AppLifecycleState.resumed) {
//TODO: set status to online here in firestore
UpPrint(name: "CheckUserStatus", value: "Online");
UpFirebaseDB.updateUserStatus(status: true);
} else {
//TODO: set status to offline here in firestore
UpFirebaseDB.updateUserStatus(status: false);
UpPrint(name: "CheckUserStatus", value: "Offline");
}
}
Примечание. Я использовал InitialRoute: '/', onGenerateRoute: UpRoutes.onGenerateRoute для навигации по страницам и использую Getx для управления состоянием.
Поблагодарите в расширенном режиме.
Убедитесь, что вы инициализировали WidgetsFlutterBinding в своей функции main()
, гарантируя, что ваше приложение Flutter правильно настроено для обработки событий жизненного цикла.
бывший:
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
Спасибо за ответ, но уже сделал это.
Не уверен в настройке вашего приложения, но могу предоставить вам базовый код, который работает на моей стороне.
Сначала создайте файл lifecylce_manager.dart, который включает в себя:
class LifeCycleManager extends StatefulWidget {
final Widget child;
const LifeCycleManager({super.key, required this.child});
@override
LifeCycleManagerState createState() => LifeCycleManagerState();
}
class LifeCycleManagerState extends State<LifeCycleManager>
with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
// TODO: implement didChangeAppLifecycleState
UpPrint(name: "CheckUserStatus", value: "Before");
print(state);
UpPrint(name: "CheckUserStatus", value: "After");
if (state == AppLifecycleState.resumed) {
//TODO: set status to online here in firestore
UpPrint(name: "CheckUserStatus", value: "Online");
UpFirebaseDB.updateUserStatus(status: true);
} else {
//TODO: set status to offline here in firestore
UpFirebaseDB.updateUserStatus(status: false);
UpPrint(name: "CheckUserStatus", value: "Offline");
}
}
@override
Widget build(BuildContext context) {
return Container(
child: widget.child,
);
}
}
Затем в файле main.dart или в точке входа вашего приложения:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return LifeCycleManager(
child: MaterialApp(
initialRoute: '/',
onGenerateRoute: UpRoutes.onGenerateRoute,
theme: appTheme(),
),
);
}
}
Вы обернули свой MaterialApp в main.dart с помощью LifeCycleManager или как там называется класс, в котором вы определили предоставленный код?