繁体   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