Article Directory
Método 1: rootBundle.loadString
Método 2: DefaultAssetBundle.of(context).loadString
La diferencia entre los dos métodos
Para obtener el archivo json local en Flutter, se proporcionan dos métodos en la publicación del blog. Aquí primero cree un archivo json local en la ruta "assets/config/anime.json", como se muestra en la figura a continuación.
Luego pubspec.yaml
agregue lo siguiente al archivo de configuración
Lo siguiente es cómo obtener el archivo json local.
Método 1: rootBundle.loadString
Puede usar rootBundle.loadString
el método para obtener el archivo json local. Como se muestra en el siguiente código
List _animes = []; // 动漫列表
@override
void initState() {
rootBundle.loadString("assets/config/anime.json").then((value) {
var map = json.decode(value); // 解码
_animes = map["animes"]; // 列表赋值
});
super.initState();
}
Luego simplemente recorra la matriz directamente, como se muestra en el siguiente código (se ha omitido el código irrelevante)
..._animes.map(
(e) => Row(
children: <Widget>[Text("${e['id']}"), Text(e['name'])],
),
)
El diagrama de efectos es el siguiente
Método 2: DefaultAssetBundle.of(contexto).loadString
El método utilizado DefaultAssetBundle.of(context).loadString
para obtener el archivo json local.
El efecto final es el mismo que el método 1, simplemente cargue el código directamente
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("加载本地json文件")),
body: FutureBuilder(
future: DefaultAssetBundle.of(context).loadString("assets/config/anime.json"),
builder: (BuildContext context, AsyncSnapshot snapshot) {
var map = json.decode(snapshot.data.toString());
_animes = map["animes"]; // 列表赋值
// 因为获取 json 文件是异步的,如果还没有获取到数据,则显示 loading 组件
if (snapshot.connectionState != ConnectionState.done) {
return Center(child: CircularProgressIndicator());
}
return Card(
child: Column(
children: _animes
.map((e) => Row(children: <Widget>[Text("${e['id']}"), Text(e['name'])]))
.toList(),
),
);
},
),
);
}
La diferencia entre los dos métodos
Con respecto a la diferencia entre las dos formas de cargar archivos json locales, los dos siguientes son información relevante que encontré, solo como referencia
Carga a través del objeto rootBundle: cada aplicación Flutter tiene un objeto rootBundle, a través del cual puede acceder fácilmente al paquete de recursos principal y usar directamente el objeto rootBundle estático global en el paquete: flutter/services.dart para cargar el activo.
Cargando a través de DefaultAssetBundle: Se recomienda usar DefaultAssetBundle para obtener el AssetBundle del BuildContext actual. En lugar de usar el paquete de activos predeterminado creado por la aplicación, este enfoque crea un AssetBundle diferente que el widget principal reemplaza dinámicamente en el tiempo de ejecución, lo cual es útil para la localización o los escenarios de prueba.
Aquí se explica cómo obtener archivos json locales en Flutter.
Enlace original: https://blog.csdn.net/qq_42351033/article/details/118669642