Flutter: cómo obtener el archivo json local y decodificarlo en Flutter

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.
inserte la descripción de la imagen aquí

Luego  pubspec.yaml agregue lo siguiente al archivo de configuración inserte la descripción de la imagen aquí

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

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_27909209/article/details/130410477
Recomendado
Clasificación