簡體   English   中英

onDestroy 或 dispose in flutter

[英]onDestroy or dispose in flutter

我正在開發一個筆記應用程序,我想在關閉該應用程序時(從最近的應用程序中刪除該應用程序時)保存我的筆記。 我嘗試了dispose()方法,但它沒有用。 我試過了:

@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print(state);
    final isDetached = state == AppLifecycleState.detached;}

但它也不起作用。 它不打印分離狀態,只打印AppLifecycleState.paused AppLifecycleState.inactive AppLifecycleState.resume

那我該怎么辦!!

如果您正在觀察應用程序生命周期 state,您的代碼應該如下所示:

class AppLifecycleReactor extends StatefulWidget {
  const AppLifecycleReactor({ Key? key }) : super(key: key);

  @override
  State<AppLifecycleReactor> createState() => _AppLifecycleReactorState();
}

class _AppLifecycleReactorState extends State<AppLifecycleReactor> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance!.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance!.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print(state);
  }

  @override
  Widget build(BuildContext context) {
    return Widgets;
  }
}

總結:

  • 在擴展with WidgetsBindingObserver之后使用extends State
  • WidgetsBinding.instance.;addObserver(this); initstate
  • WidgetsBinding.instance.;removeObserver(this); dispose

更多信息檢查: https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver-class.html

dispose() function 僅在StatefulWidget中可見

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final AppRouter _appRouter = AppRouter();

  @override
  Widget build(BuildContext context) {
    return BlocProvider<CounterCubit>(
      create: (context) => CounterCubit(),
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
          visualDensity: VisualDensity.adaptivePlatformDensity,
        ),
        onGenerateRoute: _appRouter.onGenerateRoute,
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    // dispose your code here
  }
}

請考慮使用Firebase並在每次編輯后保存,例如在使用rx.debounce中的rx.debounce進行編輯后 500 毫秒后保存。

您不能指望應用程序在關閉時真的能夠執行處置甚至將某些內容保存到數據庫中。 從最近的列表中刪除一個應用程序會很快結束該應用程序(殺死該應用程序),這就是它甚至適用於掛起/崩潰的應用程序的原因。

在這種情況下,您始終可以使用共享首選項。 共享首選項用於將數據保存在本地存儲中,實現也非常簡單。 不要擔心它不會讓您的應用程序滯后或變慢。 它工作得非常順利

https://pub.dev/packages/shared_preferences

如果有幫助,請點贊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM