应用退出时无法调用dispose()方法

时间:2019-08-30 22:38:41

标签: flutter dart

我想调用在退出应用程序时保存在SharedPreferences中的方法

我尝试了dispose()但不起作用

 @override
void dispose() {
  print("exit");
  _subscription.cancel(); 
  saveCounter(); 
  super.dispose();
}

Future<void> saveCounter() async{
    final prefs = await SharedPreferences.getInstance();
    await prefs.setInt('startNumber', _steps);
}

1 个答案:

答案 0 :(得分:1)

  • 我们可以使用Scaffold包装WillPopScope
  • 我们可以在函数内执行 saveCounter
  • 确保它会返回包装在Future.value()内的 true
class WillPopScreen extends StatelessWidget {
  Future<void> saveCounter() async {
    final prefs = await SharedPreferences.getInstance(); // we can save state
    await prefs.setInt('startNumber', _steps);
  }

  Future<bool> onCloseEvent() async {
    await saveCounter();
    return Future.value(true); // we cannot put "return true"
  }

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: onCloseEvent, // will interrupt our scaffold dismissal
      child: Scaffold(
        appBar: AppBar(
          title: Text('Will Pop Interrupt'),
        ),
        body: Center(
          child: Text("Execute method when Closing"),
        ),
      ),
    );
  }
}

完整的工作仓库

您可以在此Github repo

中自行构建它

演示

enter image description here