0

我正在将转换为字符串的模态对象保存到 SharedPreference 并终止应用程序。但是当我回到应用程序时 SharedPreference 已经丢失了保存的数据。我是新来的。请帮忙。我想保存我的数据并杀死应用程序并在回来时再次检索。

这是我的代码

    class HomeScreen extends StatefulWidget {
       HomeScreen({Key? key}) : super(key: key);
       @override
       State<HomeScreen> createState() => _HomeScreenState();
    }

     class _HomeScreenState extends State<HomeScreen> with WidgetsBindingObserver {
        List<User> selectedUser = [];
        List<User> visibleUser = [];
        double screenHeight = 0.0;
        static const _keyUser = 'users';

        @override
        initState() {
          super.initState();
          WidgetsBinding.instance!.addObserver(this);
          getUsersFromSharedPref();
        }

       Future<void> getUsersFromSharedPref() async {
         final pref = await SharedPreferences.getInstance();
         setState((){
           String savedJson = pref.getString(_keyUser) ?? '';
           if(savedJson.length > 0) {
              selectedUser = UserApi.getUsersFromSharedPref(savedJson);
           }
         });
       }

       Future<void> saveInSharedPref() async {
         final pref = await SharedPreferences.getInstance();
         String encodedData = UserApi.getStringFromobject(selectedUser);
         await pref.setString(_keyUser , encodedData);
       }

       @override
       Widget build(BuildContext context) {
         return Scaffold(
            body: FutureBuilder<List<User>>(
            future: UserApi.getUserLocally(context),
            builder: (context, snapshot) {
            final allUsers = (selectedUser.isNotEmpty) ? selectedUser : snapshot.data;
            visibleUser = (selectedUser.isNotEmpty)?(selectedUser.where((aUser) => (aUser.isDefaultUser)).toList()) : (allUser!.where((aUser) => (aUser.isDefaultUser)).toList());
            .
            .
            .
            })
         );
     }

     @override
     void dispose() {
        super.dispose();
     }

     @override
     void didChangeAppLifecycleState(AppLifecycleState state) {
        super.didChangeAppLifecycleState(state);


     final isBackground = state == AppLifecycleState.paused;

     if (isBackground || (state == AppLifecycleState.inactive ||
          state == AppLifecycleState.detached)) {
          saveInSharedPref();
     }

     if(state == AppLifecycleState.resumed){
          getUserFromSharedPref();
     }
     }
   }



  class UserApi {
      static Future<List<User>> getUserLocally(BuildContext context) async {
           final assetBundle = DefaultAssetBundle.of(context);
           final data = await assetBundle.loadString('assets/data/Users.json');
           final body = json.decode(data.toString()).cast<Map<String, dynamic>>();
           return body.map<User>((json) => new User.fromJson(json)).toList();
      }

      static List<User> getUserFromSharedPref(String jsonString){
          final body = json.decode(jsonString).cast<Map<String, dynamic>>();
          return body.map<User>((json) => new User.fromJson(json)).toList();
      }
  }

从 SharedPreferences 杀死应用程序后,我没有得到保存的数据。

4

0 回答 0