Flutter 如何在flatterweb中保存到web本地存储
我有一个网站是用flutter for web构建的,目前,我正在尝试保存到web本地存储或cookie,但似乎找不到任何插件或方法来存档。你可以使用Flutter 如何在flatterweb中保存到web本地存储,flutter,dart,flutter-web,Flutter,Dart,Flutter Web,我有一个网站是用flutter for web构建的,目前,我正在尝试保存到web本地存储或cookie,但似乎找不到任何插件或方法来存档。你可以使用窗口。本地存储来自dart:html import 'dart:html'; class IdRepository { final Storage _localStorage = window.localStorage; Future save(String id) async { _localStorage['selected
窗口。本地存储来自dart:html
import 'dart:html';
class IdRepository {
final Storage _localStorage = window.localStorage;
Future save(String id) async {
_localStorage['selected_id'] = id;
}
Future<String> getId() async => _localStorage['selected_id'];
Future invalidate() async {
_localStorage.remove('selected_id');
}
}
导入'dart:html';
类IdRepository{
最终存储_localStorage=window.localStorage;
未来保存(字符串id)异步{
_localStorage['selected_id']=id;
}
Future getId()async=>_localStorage['selected_id'];
Future invalidate()异步{
_localStorage.remove('selected_id');
}
}
升级到flatter 1.9
后,'dart:html'
不再编译,因为它不是flatter
附带的dart SDK的一部分。
我们目前可以使用此软件包,因为它支持Android、IOS和WEB:
使用颤振1.10
我们可以使用以下软件包:
import'package:universal_html/html.dart';
// ...
//阅读偏好
var myPref=window.localStorage['myPref'];
// ...
//写入首选项
window.localStorage['mypref']=mypref;
共享首选项
dart软件包现在支持从版本开始的web本地存储
与Android和iOS上的共享首选项类似,下面是web上本地存储的代码片段
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; // rememeber to import shared_preferences: ^0.5.4+8
void main() {
runApp(MaterialApp(
home: Scaffold(
body: Center(
child: RaisedButton(
onPressed: _incrementCounter,
child: Text('Increment Counter'),
),
),
),
));
}
_incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int counter = (prefs.getInt('counter') ?? 0) + 1;
print('Pressed $counter times.');
await prefs.setInt('counter', counter);
}
我遇到了一个类似的问题,我的首选项没有在跑步中保持。我以为window.localStorage
坏了。我发现,在默认情况下,flifter每次启动时都会有一个新端口号,因此window.localStorage
会被清除
此票证涉及设置显式端口。这解决了我的问题,现在window.localStorage
在运行期间持续存在:
在VS代码中,您可以在launch.json
文件中设置端口号:
{
"name": "Flutter",
"request": "launch",
"type": "dart",
"args": ["--web-port", "8686"]
},
我正在使用包在位置存储上存储数据
class SessionManager {
static SessionManager manager;
static SharedPreferences _prefs;
static Future<SessionManager> getInstance() async {
if (manager == null || _prefs == null) {
manager = SessionManager();
_prefs = await SharedPreferences.getInstance();
}
return manager;
}
void putCityId(String cityId) {
_prefs.setString("KEY_CITY_ID", cityId);
}
String getCityId() {
return _prefs.getString("KEY_CITY_ID") ?? "";
}
}
类会话管理器{
静态会话管理器;
静态共享引用;
静态未来getInstance()异步{
if(manager==null | | | u prefs==null){
manager=SessionManager();
_prefs=等待SharedReferences.getInstance();
}
退货经理;
}
void putCityId(字符串cityId){
_prefs.setString(“关键城市ID”,城市ID);
}
字符串getCityId(){
返回_prefs.getString(“KEY\u CITY\u ID”);
}
}
共享_首选项仅存储当前会话的数据
如果要永久存储数据,则应使用cookie存储数据
用于在浏览器Cookie上存储数据的Cookie
import 'dart:html';
class CookieManager {
static CookieManager _manager;
static getInstance() {
if (_manager == null) {
_manager = CookieManager();
}
return _manager;
}
void _addToCookie(String key, String value) {
// 2592000 sec = 30 days.
document.cookie = "$key=$value; max-age=2592000; path=/;";
}
String _getCookie(String key) {
String cookies = document.cookie;
List<String> listValues = cookies.isNotEmpty ? cookies.split(";") : List();
String matchVal = "";
for (int i = 0; i < listValues.length; i++) {
List<String> map = listValues[i].split("=");
String _key = map[0].trim();
String _val = map[1].trim();
if (key == _key) {
matchVal = _val;
break;
}
}
return matchVal;
}
}
导入'dart:html';
班级经理{
静态CookieManager\u manager;
静态getInstance(){
如果(_manager==null){
_manager=CookieManager();
}
返回(u经理),;
}
void\u addToCookie(字符串键、字符串值){
//2592000秒=30天。
document.cookie=“$key=$value;max age=2592000;path=/;”;
}
字符串\u getCookie(字符串键){
字符串cookies=document.cookie;
List listValues=cookies.isNotEmpty?cookies.split(“;”):List();
字符串matchVal=“”;
对于(int i=0;i
虽然,正如有人在slack中所写的,它看起来仍然可用,但分析器中存在一个错误,使IDE显示错误,但如果您运行它,它就会工作。此包需要一个路径。有人知道这应该是什么吗?它可以是任何东西,这正是它保存数据的地方。您可以看到他们使用的示例:Preferences.Preferences(路径:'./example/prefs')
此文件需要存在吗?如果没有,它会被创建吗。如果不是,它需要什么格式,路径的基础是什么?如果不存在,它将被创建。/
是您项目的根。@dazza5000不,这不适用于Flatter 1.9自己检查一下,您会发现它不适用于我SharedReferences prefs=wait SharedReferences.getInstance()代码>从不返回任何内容。@请尝试在共享的\u首选项\u网站^0.1.2+7上添加显式依赖项。