{"id":20046468,"url":"https://github.com/zachcp/cljdart-experiment","last_synced_at":"2026-03-04T21:01:29.593Z","repository":{"id":247615170,"uuid":"826351249","full_name":"zachcp/cljdart-experiment","owner":"zachcp","description":"Playing with ClojureDart and Flutter","archived":false,"fork":false,"pushed_at":"2024-07-09T14:59:25.000Z","size":354,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T22:13:28.645Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zachcp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-09T14:39:36.000Z","updated_at":"2024-07-09T14:59:28.000Z","dependencies_parsed_at":"2024-07-09T19:06:40.266Z","dependency_job_id":"4d72cbd8-462a-452a-ac01-59a6b36ddd8d","html_url":"https://github.com/zachcp/cljdart-experiment","commit_stats":null,"previous_names":["zachcp/cljdart-experiment"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zachcp/cljdart-experiment","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachcp%2Fcljdart-experiment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachcp%2Fcljdart-experiment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachcp%2Fcljdart-experiment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachcp%2Fcljdart-experiment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zachcp","download_url":"https://codeload.github.com/zachcp/cljdart-experiment/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zachcp%2Fcljdart-experiment/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30092859,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T20:42:30.420Z","status":"ssl_error","status_checked_at":"2026-03-04T20:42:30.057Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T11:24:10.723Z","updated_at":"2026-03-04T21:01:29.555Z","avatar_url":"https://github.com/zachcp.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Every Minute on the Minute\n\nExperiment with ClojureDart + flutter. Main idea was to create an interval app that would allow you to specify intervals and subintervals - e.g. work the first 30s of a 2Min interval; do that 10 times. \n\n```sh\n# terminal 1\nclj -M:cljd watch\n# terminal 2\nflutter run\n```\n\n\n## Status:  incomplete\n\n\n![](images/desktop.png)\n![](images/iphone.png)\n\n\n## Quick Impressions\n\n- Flutter is really powerful and can create nice looking, performant cross-platform apps\n- ClojureDart is a nice wrapper around Dart.\n- The `f/widget` macro is very powerful and condenses down a lot of code but you definitely need to understand Flutter a but - how the widgets are constructed and when to use `.child` or `.children`. Its not bad when you get used ot it but I hit a lot of errors at first.\n- App state and widget state took a bit to grok - where/how do you put local variables vs. global variables.\n- The [clojuredart samples](https://github.com/Tensegritics/ClojureDart/tree/main/samples) are good but they are isolated. I found the fizzbuzz helpful for showing me `Streams` but I had to ask for some help on how to make a [Segmented Button](https://m3.material.io/components/segmented-buttons/overview)\n- Flutter is a complete ecosystem - web knowledge etc won't translate except in the abstract (e.g. nesting of dive elements).\n- Within a widget tree let-bound variables can be used correctly.\n- I didn't use or try any of the more advanced tools - e.g. use of Keys to speficfy widgets or the `f/$` command.\n- I used a stream ticker to invoke periodic updates but I'm not sure thats a good/best way to do this.\n- I definitely didn't have a good sense of idiomatic when it comes to things like propagating styles across/down widget trees.\n- I spent a lot of time getting both the UI and the logic to work before things started to \"click\" but now I need to move on. \n- A cljd version of the [material_3_demo](https://flutter.github.io/samples/web/material_3_demo/) ([src](https://github.com/flutter/samples/tree/main/material_3_demo)) would have been very helpful in getting me started as I would have been able to jump start into doing useful fluttery work quite quickly.\n- Fast reloads are great: you really need to keep reloading all the time. A few times I borked my parens and had a non-working app. Small changes and refresh on every change is the way to go.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzachcp%2Fcljdart-experiment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzachcp%2Fcljdart-experiment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzachcp%2Fcljdart-experiment/lists"}