Tweet constructor

Tweet(
  1. Map<String, dynamic> items
)

Default constructor for JSON map

Implementation

Tweet(Map<String, dynamic> items) {
  id = items["id"];
  source = RegExp(">[A-Z.a-z ]*<").stringMatch(items["source"]) ?? "";
  source = source.length > 3 ? source.substring(1, source.length - 1) : "";
  var range = items["display_text_range"];
  body = items["full_text"].toString().substring(range[0], range[1]);
  favoriteCount = items["favorite_count"] ?? 0;
  retweetCount = items["retweet_count"] ?? 0;
  retweeted = items["retweeted"] ?? false;
  favorited = items["favorited"] ?? false;
  replyToId = items["in_reply_to_status_id"] ?? 0;

  try {
    String time = items["created_at"];
    time = time.substring(0, 19) + time.substring(25);
    timestamp = new DateFormat("EEE MMM dd HH:mm:ss yyyy").parseUTC(time).millisecondsSinceEpoch.abs();
  } catch (e) {}

  var user = (items["user"]) as Map<String, dynamic>;
  tag = user["screen_name"];
  fullName = user["name"];
  profileUrl = user["profile_image_url_https"];
  verified = user["verified"] ?? false;

  var retweetStatus = (items["retweeted_status"]) as Map<String, dynamic>?;
  isRetweet = retweetStatus != null;

  if (isRetweet) {
    try {
      originalId = retweetStatus?["id"] ?? 0;
      favoriteCount = retweetStatus?["favorite_count"] ?? 0;
      originalBody = retweetStatus?["full_text"];

      var originalUser = retweetStatus?["user"];
      originalTag = originalUser["screen_name"];
      originalName = originalUser["name"];
      originalProfileUrl = originalUser["profile_image_url_https"];

      var originalEntities = (retweetStatus?["entities"]) as Map<String, dynamic>;
      var originalMedia = (originalEntities["media"]) as List<dynamic>?;

      List<String?> originalMedias = [];

      if (originalMedia != null && originalMedia.isNotEmpty) originalMedia.forEach((item) => originalMedias.add(item["media_url_https"]));

      originalImages = originalMedias.join("::");
    } catch (e) {}
  }

  var quotedStatus = (items["quoted_status"]) as Map<String, dynamic>?;
  isQuote = quotedStatus != null;

  if (isQuote) {
    try {
      originalId = quotedStatus!["id"] ?? 0;
      originalBody = quotedStatus["full_text"];

      var originalUser = quotedStatus["user"];
      originalTag = originalUser["screen_name"];
      originalName = originalUser["name"];
      originalProfileUrl = originalUser["profile_image_url_https"];

      var originalEntities = (quotedStatus["entities"]) as Map<String, dynamic>;
      var originalMedia = (originalEntities["media"]) as List<dynamic>?;

      List<String?> originalMedias = [];

      if (originalMedia != null && originalMedia.isNotEmpty) originalMedia.forEach((item) => originalMedias.add(item["media_url_https"]));

      originalImages = originalMedias.join("::");
    } catch (e) {}
  }

  var entities = (items["entities"]) as Map<String, dynamic>;
  var urls = (entities["urls"] as List<dynamic>?);
  var media = (entities["media"] as List<dynamic>?);

  try {
    if (urls != null && urls.isNotEmpty) urls.forEach((url) => body = body!.replaceFirst(url["url"], url["expanded_url"]));
  } catch (e) {
    print(e);
  }

  List<String?> medias = [];

  if (media != null && media.isNotEmpty) media.forEach((item) => medias.add(item["media_url_https"]));

  images = medias.join("::");
}