Будучи новичком в Dart / Flutter, я использую этот фрагмент, чтобы попытаться загрузить файл config.json
, который я сохранил в своей папке активов. При попытке прочитать этот файл я использую модели на языке Dart Документация по фьючерсам и документы Flutter при чтении локальных текстовых файлов :
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:convert';
Future<List> loadAsset() async {
String raw = await rootBundle.loadString('assets/config.json');
List configData = json.decode(raw);
return configData;
}
Затем внутри своего класса я пытаюсь загрузить конфигурацию в список, например:
Future<List> configData = loadAsset();
print(configData.toString());
// prints out: Instance of 'Future<List<dynamic>>'
Результат всего этого, кажется, работает. Тем не менее я не могу найти способ использовать данные, которые я загрузил. Любые попытки получить доступ к элементам в Списке, например, configData[0]
приводит к ошибке:
The following _CompileTimeError was thrown building
HomePage(dirty, state: HomePageState#b1af8):
'package:myapp/pages/home_page.dart': error:
line 64 pos 19: lib/pages/home_page.dart:64:19:
Error: The method '[]' isn't defined for the class
'dart.async::Future<dart.core::List<dynamic>>'.
Try correcting the name to the name of an existing method,
or defining a method named '[]'.
Я хотел бы преобразовать configData
Future в обычный объект, который я могу читать и передавать по своему приложению. Я могу сделать что-то очень похожее, и заставить его работать внутри метода сборки виджета, используя FutureBuilder
и DefaultAssetBundle
, таким образом ...
DefaultAssetBundle
.of(context)
.loadString('assets/config.json')
... но я не хочу перегружать данные во всех виджетах, которые в них нуждаются. Я хотел бы загрузить внутри отдельный пакет Dart и сделать его доступным в качестве глобальной конфигурации для всего моего приложения. Любые указатели будут оценены.
Я попробовал предложение Реми Русселе:
List configData = await loadAsset();
print(configData[0]);
В этом случае я получаю ошибку компилятора:
compiler message: lib/pages/home_page.dart:55:21: Error: Getter not found: 'await'.
compiler message: List configData = await loadAsset();
compiler message: ^^^^^