【问题标题】:Flutter: How to Make an array with the JSON dataFlutter:如何使用 JSON 数据创建数组
【发布时间】:2018-11-15 07:39:18
【问题描述】:

我想用 JSON 制作一个数组,但我复制了同一篇文章。 我正在为 WordPress 使用 REST API JSON 插件

关于 WP REST API 的更多信息:https://v2.wp-api.org

这是我的 JSON 代码

    [
  {
    "id": 65,
    "date": "2014-08-24T18:56:26",
    "date_gmt": "2014-08-24T18:56:26",
    "guid": {
      "rendered": "http:\/\/********\/********\/?p=1"
    },
    "modified": "2018-06-05T13:24:58",
    "modified_gmt": "2018-06-05T13:24:58",
    "slug": "this-url-wordpress",
    "status": "publish",
    "type": "post",
    "title": {
      "rendered": "\u2018 This a test title 1 \u2019"
     },
     "content": {
       "rendered": "<p>This is a content 1</p>",
       "protected": false
     },
     "excerpt": {
       "rendered": "<p>this a excerpt 1...<\/p>\n",
       "protected": false
     },
     "author": 1,
     "featured_media": 468,
     "comment_status": "open",
     "ping_status": "open",
     "sticky": false,
     "template": "",
     "format": "standard",
     "meta": [ 
     ],
     "categories": [
      14
     ],
     "tags": [
      17,
      18
     ],
  },
  {
    "id": 650,
    "date": "2014-08-24T18:56:26",
    "date_gmt": "2014-08-24T18:56:26",
    "guid": {
      "rendered": "http:\/\/********\/********\/?p=1"
    },
    "modified": "2018-06-05T13:24:58",
    "modified_gmt": "2018-06-05T13:24:58",
    "slug": "this-url-wordpress",
    "status": "publish",
    "type": "post",
    "title": {
      "rendered": "\u2018 This a test title 2 \u2019"
     },
     "content": {
       "rendered": "<p>This is a content 2</p>",
       "protected": false
     },
     "excerpt": {
       "rendered": "<p>this a excerpt 2...<\/p>\n",
       "protected": false
     },
     "author": 1,
     "featured_media": 468,
     "comment_status": "open",
     "ping_status": "open",
     "sticky": false,
     "template": "",
     "format": "standard",
     "meta": [ 
     ],
     "categories": [
      14
     ],
     "tags": [
      17,
      18
     ],
  },
  {
    "id": 230,
    "date": "2014-08-24T18:56:26",
    "date_gmt": "2014-08-24T18:56:26",
    "guid": {
      "rendered": "http:\/\/********\/********\/?p=1"
    },
    "modified": "2018-06-05T13:24:58",
    "modified_gmt": "2018-06-05T13:24:58",
    "slug": "this-url-wordpress",
    "status": "publish",
    "type": "post",
    "title": {
      "rendered": "\u2018 This a test title 3 \u2019"
     },
     "content": {
       "rendered": "<p>This is a content 3</p>",
       "protected": false
     },
     "excerpt": {
       "rendered": "<p>this a excerpt 3...<\/p>\n",
       "protected": false
     },
     "author": 1,
     "featured_media": 468,
     "comment_status": "open",
     "ping_status": "open",
     "sticky": false,
     "template": "",
     "format": "standard",
     "meta": [ 
     ],
     "categories": [
      14
     ],
     "tags": [
      17,
      18
     ],
  },
]

我的代码:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:peluqueriafran/WebView.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<Post> fetchPost() async {
  final response =
  await http.get('http://**********:88/WordPress/wp-json/wp/v2/posts/');
  final responseJson = json.decode(response.body);

  return new Post.fromJson(responseJson);
}

class Post {
    final int id;
    final String title;
    final String body;
    final String urlimagen;
    final String linkWeb;

    Post({this.id, this.title, this.body, this.urlimagen, this.linkWeb});

   factory Post.fromJson(Map<String, dynamic> json) {
      return new Post(
         title: json['title']['rendered'].toString(),
      );
   }
}

网站:

App: - 最后生成的被选中,我要全部发帖。
我希望有人可以帮助我,谢谢

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    您可以更改 fetchPost 以返回帖子列表,例如:

    Future<List<Post>> fetchPosts() async {
      http.Response response =
          await http.get('http://**********:88/WordPress/wp-json/wp/v2/posts/');
      List responseJson = json.decode(response.body);
      return responseJson.map((m) => new Post.fromJson(m)).toList();
    }
    

    然后您可以像这样使用Future&lt;List&lt;Post&gt;&gt;:

    @override
    Widget build(BuildContext context) {
      return new FutureBuilder<List<Post>>(
        future: fetchPosts(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) return Container();
          List<Post> posts = snapshot.data;
          return new ListView(
            children: posts.map((post) => Text(post.title)).toList(),
          );
        },
      );
    }
    

    ListView 采用子列表,就像Column 等一样。因此您可以使用包含子列表的任何小部件

    【讨论】:

    • 如果你需要的话,我给你我的课pastebin.com/b3AJeD3U
    • Añadí y él dice: El 'título' Getter no está definido para la clase 'Lista ' Mira la imagen: imgur.com/a/fPdLtDm
    • 你现在有一个帖子列表,所以你必须把它变成一个小部件列表。 snapshot.data 现在是一个列表,因此请查看 ListView.builder
    • 添加到答案中
    • @Santiago itemBuilder 需要是一个采用上下文和只返回一个小部件(基于 int 的值)的 int 的方法,例如:itemBuilder: (_, i) =&gt; Text(posts[i].title)
    【解决方案2】:
    {
      "key": "message",
      "texts": [
        {
          "lan": "en",
          "text": "You have pushed this button many times"
        },
        {
          "lan": "tr",
          "text": "Bu butona bir çok kez bastınız"
        },
        {
          "lan": "ru",
          "text": "Вы много раз нажимали кнопку"
        }
      ]
    }
    
    class Lang {
      final String key;
      final List<dynamic> texts;
    
      Lang(this.key, this.texts);
    
      Lang.fromJson(Map<String, dynamic> json)
          : key = json['key'],
            texts = json['texts'];
    
      Map<String, dynamic> toJson() => {
            'key': key,
            'texts': texts,
          };
    }
    
    class Texts {
      final String lan;
      final String text;
    
      Texts(this.lan, this.text);
    
      Texts.fromJson(Map<String, dynamic> json)
          : lan = json['lan'],
            text = json['text'];
    
      Map<String, dynamic> toJson() => {
            'lan': lan,
            'text': text,
          };
    }
    
    
      Map<String, dynamic> languages = json.decode(jsonCrossword);
      var user = new Lang.fromJson(languages);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 2021-07-12
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2021-04-19
      相关资源
      最近更新 更多