Flutter DidChangeAppLifecycleState не работает

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 для управления состоянием.

Поблагодарите в расширенном режиме.

Вы обернули свой MaterialApp в main.dart с помощью LifeCycleManager или как там называется класс, в котором вы определили предоставленный код?

thenry 01.07.2024 20:11
0
1
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Убедитесь, что вы инициализировали WidgetsFlutterBinding в своей функции main(), гарантируя, что ваше приложение Flutter правильно настроено для обработки событий жизненного цикла.

бывший:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

Спасибо за ответ, но уже сделал это.

Alpit Panchal 02.07.2024 05:23
Ответ принят как подходящий

Не уверен в настройке вашего приложения, но могу предоставить вам базовый код, который работает на моей стороне.

Сначала создайте файл 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(),
    ),
  );
 }
}

Другие вопросы по теме

Похожие вопросы