gpt4 book ai didi

list - 在flift中缓存两个列表

转载 作者:行者123 更新时间:2023-12-03 03:35:05 25 4
gpt4 key购买 nike

我想缓存从Firebase获得的两个列表,以供用户离线时使用

这是我的列表显示屏幕的完整代码-

import 'package:flutter/material.dart';

import 'package:naamaa/calculations/name-list-calc.dart';

List namesList = List();
List meaningsList = List();

class NameList extends StatefulWidget {
@override
_NameListState createState() => _NameListState();
}

class _NameListState extends State<NameList> {
Future<String> getPosts() async {
var names = await NameListCalc().nameListCalc();
namesList.addAll(names[0]);
meaningsList.addAll(names[1]);
String s = 'test';
return s;
}

@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: getPosts(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Scaffold(
resizeToAvoidBottomPadding: false,
body: ListView.builder(
padding: EdgeInsets.zero,
itemBuilder: (context, position) {
return Row(
children: <Widget>[
Container(
width: 100,
child: Text(namesList[position]),
),
Container(
child: Text(meaningsList[position]),
)
],
);
},
itemCount: namesList.length,
),
);
} else {
return Text(':(');
}
},
);
}
}

我想缓存namesList和意义列表供以后使用。

如果有人可以帮助,那就太好了:)

最佳答案

您的问题描述并未完全满足您的要求,但是您可以使用shared_preferences库来存储数据列表,如下所示
添加以下行pubspec.yaml

dependencies:
flutter:
sdk: flutter
shared_preferences:

您可以使用此示例,并根据需要添加更多实用程序方法。

import 'dart:convert';

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

void main() async {
AppConfig.init(() {
runApp(MyApp());
});
}

class CustomModel {
int id;
String name;

CustomModel({this.id, this.name});

factory CustomModel.fromJson(Map<String, dynamic> json) {
return CustomModel(id: json["id"], name: json["name"]);
}

Map<String, dynamic> toJson() => {"id": id, "name": name};

@override
String toString() {
return "id: $id, name: $name";
}
}

class AppConfig {
static Future init(VoidCallback callback) async {
WidgetsFlutterBinding.ensureInitialized();
await SharedPreferenceUtils.init();
callback();
}
}

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class SharedPreferenceUtils {
static SharedPreferences prefs;

static init() async {
prefs = await SharedPreferences.getInstance();
// storing lists
await putStringList("m_list", ["abc", "def"]);
await putObjectList("data",
[CustomModel(id: 1, name: "Bob"), CustomModel(id: 2, name: "Alice")]);
}

static Future<bool> putStringList(String key, List<String> list) async {
return prefs.setStringList(key, list);
}

static List<String> getStringList(String key) {
return prefs.getStringList(key);
}

static Future<bool> putObjectList(String key, List<Object> list) async {
if (prefs == null) return null;
List<String> _dataList = list?.map((value) {
return json.encode(value);
})?.toList();
return prefs.setStringList(key, _dataList);
}

static List<T> getObjList<T>(String key, T f(Map v),
{List<T> defValue = const []}) {
if (prefs == null) return null;
List<Map> dataList = getObjectList(key);
List<T> list = dataList?.map((value) {
return f(value);
})?.toList();
return list ?? defValue;
}

static List<Map> getObjectList(String key) {
if (prefs == null) return null;
List<String> dataList = prefs.getStringList(key);
return dataList?.map((value) {
Map _dataMap = json.decode(value);
return _dataMap;
})?.toList();
}
}

class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(SharedPreferenceUtils.getStringList("m_list").toString()),
Text(SharedPreferenceUtils.getObjList<CustomModel>(
"data", (v) => CustomModel.fromJson(v)).toString()),
],
),
),
),
);
}
}


您无需将列表存储在 init()中,因为此示例已完成。您还可以通过多种方式将数据从一个窗口小部件传递给其他窗口小部件,如果您正在寻找状态管理,则可以使用BLOC或提供程序。

关于list - 在flift中缓存两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61560373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com