Flutter热重启后状态丢失怎么办?
我用Flutter开发时,每次 Hot Restart 都会把页面状态清空,比如表单输入的内容都没了,这调试起来太痛苦了。有没有办法保留状态?
我试过把数据存在 StatefulWidget 的 state 里,但一热重启就重置。是不是得用 Provider 或者 GetX 这类状态管理?不过我只是想临时调试,不想搞那么复杂。
顺便贴个我用 Vue 写的类似逻辑(虽然现在转 Flutter 了,但思路差不多):
<template>
<input v-model="username" placeholder="输入用户名" />
<p>当前输入:{{ username }}</p>
</template>
<script>
export default {
data() {
return { username: '' }
}
}
</script>
简单说下区别:Hot Reload 是把修改的代码注入到正在运行的 Dart 虚拟机里,状态会保留;Hot Restart 是彻底重启应用,状态当然全没了。
改代码后按
r是 Hot Reload,按R才是 Hot Restart。大部分情况下 Hot Reload 就够了。但如果你的改动涉及到 initState 这类生命周期方法的修改,Hot Reload 不生效,必须 Hot Restart,这时候状态确实会丢。
有个简单的调试方案,用 SharedPreferences 做临时持久化,几行代码的事:
这样 Hot Restart 后数据还在。调试完把 SharedPreferences 相关代码删掉就行,不用搞 Provider 或者 GetX 那些重的方案。
还有个更省事的办法,用
StateRestoration属性,但配置稍微麻烦点,调试场景下 SharedPreferences 够用了。