ClojureDart icon indicating copy to clipboard operation
ClojureDart copied to clipboard

Getting member of HashMap using keyword returns null on Flutter Web

Open ampersanda opened this issue 2 years ago • 0 comments

Description

Getting member of HashMap using keyword returns null on Flutter Web but runs ok on mobile. This problem I got when getting data from an API using GraphQL.

https://clojurians.slack.com/archives/C03A6GE8D32/p1656243161601779

Reproducable Code

(defn- keywordize-blunt
  "Make keys of map turn to keyword"
  [entry]
  (cond
    (dart/is? entry Map)
    (loop [result {}
           entries (seq entry)]
      (let [[k v] (first entries)]
        (if k
          (recur
           (assoc result
                  (keyword k)
                  (keywordize-blunt v))
           (rest entries))
          result)))

    (dart/is? entry List)
    (map (fn [e] (keywordize-blunt e)) entry)

    :else entry))

(let [r {"__typename" "Query"
             "organizationLoyaltyMessageRandomMessage"
             {"__typename" "OrganizationLoyaltyMessage"
              "pictureUrl" nil
              "message" "\"Kamu tidak perlu menjadi luar biasa untuk memulai, tapi kamu harus memulai untuk menjadi luar biasa.\" – Zig Ziglar"}}
        rk (keywordize-blunt r)]
      (dart:core/print (get r "organizationLoyaltyMessageRandomMessage"))
      (dart:core/print rk)
      (dart:core/print (:organizationLoyaltyMessageRandomMessage rk)))

log

{"pictureUrl" nil, "__typename" "OrganizationLoyaltyMessage", "message" "\"Kamu tidak perlu menjadi luar biasa untuk memulai, tapi kamu harus memulai untuk menjadi luar biasa.\" – Zig Ziglar"}

{:__typename "Query", :organizationLoyaltyMessageRandomMessage {:pictureUrl nil, :__typename "OrganizationLoyaltyMessage", :message "\"Kamu tidak perlu menjadi luar biasa untuk memulai, tapi
kamu harus memulai untuk menjadi luar biasa.\" – Zig Ziglar"}}

null

ampersanda avatar Jun 26 '22 12:06 ampersanda