#json #flutter
#json #flutter
Вопрос:
Я пытаюсь получить онлайн-файл JSON, сохранить его локально для автономного использования. Проблема в том, что когда я пытаюсь получить данные из сохраненного файла JSON, при первом открытии нового «окна» данные не загружаются, потому что моя переменная «goggo1» не получает новое значение при чтении файла JSON. Самое смешное, что если я вернусь и открою его снова, то «goggo1» получит значение, необходимое для отображения содержимого JSON.
class HomePagerstare extends StatefulWidget {
Contact contact = new Contact();
String title, content;
@override
_HomePageState createState() => _HomePageState();
}
Future<String> get getFilePath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
Future<File> get getFile async {
final path = await getFilePath;
return File('$path/myfile.json');
}
Future<File> saveToFile(String datar) async {
final file = await getFile;
return file.writeAsString(datar);
}
Future<String> readFromFile() async {
try {
final file = await getFile;
final String fileContents = await file.readAsString();
return fileContents;
} catch (e) {
return "aici e eroare";
}
}
class _HomePageState extends State<HomePagerstare> implements HomeContract {
List<Note> data1 = List<Note>();
List<Note> data2 = List<Note>();
var goggo1 = "";
Future<List<Note>> loadJsonData() async {
var data = List<Note>();
this.setState(() {
print(goggo1);
var datas = jsonDecode(goggo1);
for (var noteJson in datas) {
data.add(Note.fromJson(noteJson));
Note note =
Note(noteJson["id"], noteJson["title"], noteJson["content"]);
}
});
return data;
}
@override
void initState() {
print("1Nu Suntem Online");
super.initState();
readFromFile().then((fileContents) {
setState(() {
goggo1 = fileContents;
});
});
print("1Nu Suntem Online");
this.loadJsonData().then((value) {
setState(() {
data1.addAll(value);
data2 = data1;
print("2Nu Suntem Online");
});
});
}
class Note {
String title;
String content;
int id;
the note.dart
Note(this.id, this.title, this.content);
Note.fromJson(Map<String, dynamic> json) {
id = json['id'];
title = json['title'];
content = json['content'];
}
}
Пожалуйста, помогите!
Комментарии:
1. Используйте FutureBuilder
Ответ №1:
Я думаю, я мог бы дать вам идею. Попробуйте что-то вроде этого,
readFromFile().then((fileContents) {
setState(() {
goggo1 = fileContents;
});
this.loadJsonData().then((value) {
setState(() {
data1.addAll(value);
data2 = data1;
print("2Nu Suntem Online");
});
});
});
Надеюсь, это сработает!