Tensegritics / Tensegritics/ClojureDart
How to pass dart method as a parameter?
Nobody has claimed this yet.
- Dominant language
- Clojure
- Stars
- 1.6k
- Forks
- 119
- PR merge metrics
- No merged PRs in 30d
Description
I write wrappers over http.dart, and can't figure out how to pass http/<method-name> as an argument to the function.
For example, I have my post method as:
(defn post [url {:keys [headers on-success on-error body params]}]
(. (http/post
(.parse Uri (if params (str url "?" (params->query-string params)) url))
:body (some-> body stringify-keys convert.json/encode)
:headers (when headers ^#/(Map String String) headers))
(then #(when-let [callback (if (= (.-statusCode %) 200) on-success on-error)]
(callback (-> % .-body utils/keywordize-blunt))))
(catchError #(when on-error (on-error %)))))
Having this, I want to avoid writing the same stuff for get, put, delete, and instead use one function and pass 'method' to it like:
;; as previous, but 'method' is used instead of 'http/post'
(defn request [method url {:keys [headers on-success on-error body params]}]
(. (method
...
) ...))
(defn post [url args]
(request http/get url args))
logs
``` You rock! π€Performing hot reload...
βββ‘ EXCEPTION CAUGHT BY WIDGETS LIBRARY ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The following NoSuchMethodError was thrown building Builder(dirty):
Closure call with mismatched arguments: function 'get'
Receiver: Closure: (Uri, {Map<String, String>? headers}) => Future from Function 'get':
static.
Tried calling: get(Instance of '_SimpleUri', Instance of 'Keyword', null)
Found: get(Uri, {Map<String, String>? headers}) => Future
The relevant error-causing widget was:
MaterialApp
MaterialApp:file:///Users/m1/IdeaProjects/clojure/lconvex/lib/cljd-out/lconvex/main.dart:30:37
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5)
#1 _objectNoSuchMethod (dart:core-patch/object_patch.dart:85:9)
#2 request (package:lconvex/cljd-out/lconvex/sdk.dart:172:33)
#3 post (package:lconvex/cljd-out/lconvex/sdk.dart:131:22)
#4 init (package:lconvex/cljd-out/lconvex/sdk.dart:34:22)
#5 accounts_page (package:lconvex/cljd-out/lconvex/main.dart:12:15)
#6 MaterialPageRoute.buildContent (package:flutter/src/material/page.dart:53:55)
#7 MaterialRouteTransitionMixin.buildPage (package:flutter/src/material/page.dart:106:27)
#8 _ModalScopeState.build.. (package:flutter/src/widgets/routes.dart:872:55)
#9 Builder.build (package:flutter/src/widgets/basic.dart:7398:48)
#10 StatelessElement.build (package:flutter/src/widgets/framework.dart:4827:28)
#11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
#12 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#13 StatelessElement.update (package:flutter/src/widgets/framework.dart:4834:5)
#14 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
derObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#16 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#17 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#18 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#19 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#20 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#21 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#22 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#23 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#24 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#25 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
gets/framework.dart:6291:14)ectElement.update (package:flutter/src/wid
#27 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#28 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#29 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#30 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#31 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#32 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#33 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#34 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#35 StatelessElement.update (package:flutter/src/widgets/framework.dart:4834:5)
#36 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#37 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
utter/src/widgets/framework.dart:4928:11)ackage:fl
#39 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#40 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#41 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#42 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#43 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#44 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#45 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#46 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#47 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#48 ProxyElement.update (package:flutter/src/widgets/framework.dart:5108:5)
#49 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:111:11)
ateChild (package:flutter/src/widgets/framework.dart:3501:15)
#51 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#52 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#53 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#54 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#55 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#56 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#57 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#58 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#59 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#60 ProxyElement.update (package:flutter/src/widgets/framework.dart:5108:5)
#61 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
ntElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#63 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#64 ProxyElement.update (package:flutter/src/widgets/framework.dart:5108:5)
#65 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#66 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#67 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#68 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#69 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#70 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#71 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#72 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#73 StatelessElement.update (package:flutter/src/widgets/framework.dart:4834:5)
ateChild (package:flutter/src/widgets/framework.dart:3501:15)
#75 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#76 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#77 StatelessElement.update (package:flutter/src/widgets/framework.dart:4834:5)
#78 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#79 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6291:14)
#80 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#82 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#83 ProxyElement.update (package:flutter/src/widgets/framework.dart:5108:5)
#84 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#85 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
nt.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#87 ProxyElement.update (package:flutter/src/widgets/framework.dart:5108:5)
#88 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#89 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#90 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#91 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#92 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#93 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#94 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#95 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#96 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#97 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
ateChild (package:flutter/src/widgets/framework.dart:3501:15)
#99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#100 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#101 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#102 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#103 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#104 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#105 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#106 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#107 SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:862:7)
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)
οΏ½ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Reloaded 4 of 940 libraries in 775ms.
</details>
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up β it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the request and post entry points in cljd-out/lconvex/sdk.dart, especially the call at line 172 shown in the stack trace. Reproduce the Closure call mismatch and trace how the passed http method is invoked, using the logged get signature and arguments as the failure case. Done means the shared request path works for the intended HTTP methods without the mismatch.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter
- Domain
- compilers, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100