对于每个循环在dart中创建数组

问题描述 投票:0回答:1

我们需要为每个循环创建一个从JSON调用创建数组的循环。我是新手,所以我正在寻找明智的表现。这是现在的现有代码:

这是我们需要通过JSON调用和创建循环的数组格式

var ForumPostArr = [
  new ForumPostEntry("User1", "2 Days ago", 0 , 0 , "Hello,\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."),
  new ForumPostEntry("User2", "23 Hours ago", 1 , 0 , "Pellentesque justo metus, finibus porttitor consequat vitae, tincidunt vitae quam. Vestibulum molestie sem diam. Nullam pretium semper tempus. Maecenas lobortis lacus nunc, id lacinia nunc imperdiet tempor. Mauris mi ipsum, finibus consectetur eleifend a, maximus eget lorem. Praesent a magna nibh. In congue sapien sed velit mattis sodales. Nam tempus pulvinar metus, in gravida elit tincidunt in. Curabitur sed sapien commodo, fringilla tortor eu, accumsan est. Proin tincidunt convallis dolor, a faucibus sapien auctor sodales. Duis vitae dapibus metus. Nulla sit amet porta ipsum, posuere tempor tortor.\n\nCurabitur mauris dolor, cursus et mi id, mattis sagittis velit. Duis eleifend mi et ante aliquam elementum. Ut feugiat diam enim, at placerat elit semper vitae. Phasellus vulputate quis ex eu dictum. Cras sapien magna, faucibus at lacus vel, faucibus viverra lorem. Phasellus quis dui tristique, ultricies velit non, cursus lectus. Suspendisse neque nisl, vestibulum non dui in, vulputate placerat elit. Sed at convallis mauris, eu blandit dolor. Vivamus suscipit iaculis erat eu condimentum. Aliquam erat volutpat. Curabitur posuere commodo arcu vel consectetur."),
  new ForumPostEntry("User3", "2 Days ago", 5 , 0 , "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."),
  new ForumPostEntry("User4", "2 Days ago", 0 , 0 , "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."),
  ];

这是返回多个答案对象的JSON调用

Future<ForumAnswers> getForumAnswers(String postID) async {
   final response =
  await http.post('/api/ForumAnswers',
  headers: {"Content-Type": "application/json", 
             'Accept': 'application/json',},
  body: json.encode({'PostID' : postID }));

  if (response.statusCode == 200) {
  // If the call to the server was successful, parse the JSON
   ForumAnswers _answers;
    _answers = ForumAnswers.fromJson(json.decode(response.body));

    return _answers;

    } else {
    // If that call was not successful, throw an error.
    throw Exception('Failed to load object');
  }

}
dart flutter
1个回答
1
投票

这个问题可以使用更多的信息,但还有足够的信息。有两种方法可以做到这一点 - 最简单的方法是使用转换库中的json解码器并手动解码。另一个选项是使用json序列化库,它在编译时使用代码生成为您的类创建序列化/反序列化例程。

我不会进入代码生成,但这是我手动执行的方式:

import 'dart:convert';

class ForumAnswers {
  final List<ForumAnswer> answers;

  ForumAnswers(this.answers);

  factory ForumAnswers.fromJson(String jsonText) {
    return ForumAnswers((json.decode(jsonText) as List).map((item) => ForumAnswer.fromJson((item as Map).cast())).toList());
  }

  @override
  String toString() {
    return answers.toString();
  }
}

class ForumAnswer {
  final String userId;
  final DateTime timestamp;
  final int views;
  final String text;

  ForumAnswer({this.userId, this.timestamp, this.views, this.text});

  String get daysAgo {
    int daysAgo = -timestamp.difference(DateTime.now()).inDays;
    if (daysAgo == 1) {
      return "1 day ago";
    } else {
      return "$daysAgo days ago";
    }
  }

  static const String USERID = "userid";
  static const String TIMESTAMP = "timestamp";
  static const String VIEWS = "views";
  static const String TEXT = "text";

  factory ForumAnswer.fromJson(Map<String, dynamic> map) {
    String userId = map[USERID];
    String dateTimeString = map[TIMESTAMP];
    int views = map[VIEWS];
    String text = map[TEXT];

    DateTime dateTime = DateTime.parse(dateTimeString);

    return ForumAnswer(userId: userId, timestamp: dateTime, views: views, text: text);
  }

  @override
  String toString() {
    return "$runtimeType(userid=$userId, ago=$daysAgo, views=$views, text=$text)";
  }
}

void main() {
  String json = """
  [
    {"userid": "User1", "timestamp": "2019-03-24 13:27:00.123456z", "views": 3, "text": "Hello" },
    {"userid": "User2", "timestamp": "2019-03-28 13:30:00.234234z", "views": 2, "text": "Hello to you too" },
    {"userid": "User1", "timestamp": "2019-03-29 13:42:00.982178z", "views": 1, "text": "Goodbye" }
  ]
  """;

  print("Decoded from json: ${ForumAnswers.fromJson(json)}");
}

或者看看in dartpad

这会使你的问题中缺少一些假设......例如,ForumAnswer和ForumAnswers类实际上是什么,你回来的json是什么样的,以及ForumPostEntry中的参数是什么。但是您应该能够进行更改以从此代码中执行您想要的操作。

我建议阅读flutter's documentation for json,因为它解释与我的代码所做的基本相同,以及如何使用序列化库。

© www.soinside.com 2019 - 2024. All rights reserved.