Flutter:防止 Valuenotifier 在用户刷新后在网络上被删除

问题描述 投票:0回答:1

如果用户在使用网页版时刷新浏览器,所有 ValueNotifire 都会消失,但如果使用共享首选项或其他本地数据库,则不存在此问题。 有什么解决方案可以使 ValueNotifires 不被清除? 有关信息,我使用 flutter-go-router

颤振SDK:3.22.1 Dart SDK:3.4.1

flutter dart flutter-go-router
1个回答
0
投票

Sharedprefs 和其他本地数据库使用磁盘存储,这就是为什么您需要在使用之前

await SharedPreferences.getInstance()
。 ValueNotifiers 仅存在于内存中。您需要将 ValueNotifier 内容存储在某个持久的位置,然后在应用程序或小部件加载时重新填充它们。

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';


class CountWidget extends StatefulWidget {
  const CountWidget({super.key});

  @override
  State<CountWidget> createState() => _CountWidgetState();
}

class _CountWidgetState extends State<CountWidget> {
  final ValueNotifier<int> count = ValueNotifier<int>(0);

  @override
  void initState() {
    super.initState();
    count.addListener(() {
      setState(() {});
    });
    _initializeCount();
  }

  Future<void> _initializeCount() async {
    final prefs = await SharedPreferences.getInstance();
    final storedCount = prefs.getInt('foo_count');
    if (storedCount != null) {
      count.value = storedCount;
      if (mounted) {
        setState(() {});
      }
    }
  }

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

  @override
  Widget build(BuildContext context) {
    return Text(count.toString());
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.