【发布时间】:2019-03-08 21:10:58
【问题描述】:
我正在尝试使用 sharedprefs 来简化数据持久性 跨不同的页面/片段,(忽略这里和那里写的“json”) 在你问之前,这只是针对一次性数据,应用程序将基于 SQL 构建。
所以我创建了一个类来处理 sharedprefs
import 'dart:async';
import 'package:shared_preferences/shared_preferences.dart';
class JsonHelper {
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
getJson(String _key) async {
final SharedPreferences prefs = await _prefs;
final String _json = prefs.getString('$_key');
return _json;
}
setJson(String _key, String _json) async {
final SharedPreferences prefs = await _prefs;
prefs.setString('$_key', _json);
}
delJson(String _key) async {
final prefs = await SharedPreferences.getInstance();
prefs.remove('$_key');
}
}
还有一个“简单”的主页,简单到不行
import 'package:flutter/material.dart';
import 'package:flutter_3/DATABASE/JsonHelper.dart';
class LandingPage extends StatefulWidget {
@override
_LandingPageState createState() => _LandingPageState();
}
class _LandingPageState extends State<LandingPage> {
JsonHelper _jHelp;
String _localKey = 'test';
TextEditingController _textCTRL;
@override
void initState() {
_jHelp.setJson(_localKey, "start");
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text(_jHelp.getJson(_localKey)),
),
body: Center(
child: Column(
children: [
TextField(
controller: _textCTRL,
decoration: InputDecoration(labelText: 'write here'),
),
RaisedButton(onPressed:_pressButton)
],
),
),
),
);
}
void _pressButton () {
_jHelp.setJson(_localKey, _textCTRL.toString());
Navigator.of(context).pop();
}
}
我做错了什么? 提前感谢您的帮助
【问题讨论】:
-
您似乎没有创建要使用的
JsonHelperclass 的实例。在进行任何方法调用之前,我会将_jHelp = JsonHelper()添加到initState。 -
你得到的错误是什么?解释“不起作用”
-
之前的错误是"setJson("test","start") 在遵循 albert 建议(感谢 albert)后在 null 上调用它返回“type Future
is not a subtype of type 'String'" 我想我只需要摆脱这个类并在每个页面每次都调用常规方式:(
标签: dart flutter sharedpreferences data-persistence