Flutter:共享首选项每次需要两次重新加载才能更新Flutter中的值



我是个新手,刚开始编码。我正在使用flutter制作一个简单的应用程序,它每天打印一个新的报价,我对此使用共享的首选项,需要两次热重启或打开应用程序两次才能更新价值。我不知道为什么会发生这种事,你能解释一下吗。这是我的代码:

Future<int> setDay(n) async {
final pref = await SharedPreferences.getInstance();
pref.setInt('day', n);
}
Future<String> setQuote() async {
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setString('quote', fromallquotes['$randomnumber']);
}
Future<String> changequote() async {
final pref = await SharedPreferences.getInstance();
var currentday = pref.getInt('day');
var quote = pref.getString('quote');
if (quote == null) {
todaysquote = fromallquotes["$randomnumber"];
}
if (currentday == DateTime.now().weekday) {
todaysquote = quote;
} else {
setQuote();
todaysquote = quote;
setDay(DateTime.now().weekday);
}
return todaysquote;
}

让我给你我的代码片段,这样你就会了解

import 'package:shared_preferences/shared_preferences.dart';
class SPHelper {
static SharedPreferences prefs;
static void setPref(SharedPreferences prefs1) {
prefs = prefs1;
}
static int getInt(String key) {
return prefs.getInt(key) ?? 0;
}
static void setInt(String key, int value) {
prefs.setInt(key, value);
//prefs.commit();
}
static void setStringList(String key, List<String> lstCart) {
prefs.setStringList(key, lstCart);
}
static List<String> getStringList(String key) {
return (prefs.containsKey(key)) ? prefs.getString(key) : List<String>();
}
static void removeCartList(String key) {
var lst = List<String>();
prefs.setStringList(key, lst);
}
static String getString(String key) {
return prefs.getString(key) ?? "";
}
static void setString(String key, String value) {
prefs.setString(key, value);
//prefs.commit();
}
static void logout() {
prefs.clear();
}
}

现在你只需要在像这样的主函数中调用它

void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]).then((_) {
SharedPreferences.getInstance().then((SharedPreferences sp) {
SPHelper.setPref(sp);
setpLocator();
runApp(MyApp());
});
});
}

现在,每当您想要使用共享首选项时,您只需要这样做就可以将值设置为共享首选项CCD_ 1和CCD_。

所以基本上您不需要等待共享偏好初始化。

当您从sharedpreferences获取第一个时间引号和day时,它们都将为空值。所以你设置了一个随机报价。

else {
setQuote();
todaysquote = quote;
setDay(DateTime.now().weekday);
}

其他部分运行并设置todaysquote = quote;,但引号为null,因此todaysquote返回null,第二次打开应用程序时一切正常

相关内容

  • 没有找到相关文章

最新更新