package Ġio . flutter . plugins . as ynchronous _ method _ channel Ċ Ċ import Ġandroid . util . Log Ċ import Ġio . flutter . plugin . common .* Ċ Ċ /** Ċ Ġ* ĠA Ġnamed Ġchannel Ġwhich Ġsupports Ġasynchronous Ġreturn Ġresults Ġfor Ġcommunic ating Ċ Ġ* Ġwith Ġthe ĠFlutter Ġapplication Ġusing Ġasynchronous Ġmethod Ġcalls . Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ< p > Incoming Ġmethod Ġcalls Ġare Ġdecoded Ġfrom Ġbinary Ġon Ġreceipt , Ġand ĠJava Ġresults Ġare Ġencoded Ċ Ġ* Ġinto Ġbinary Ġbefore Ġbeing Ġtransmitted Ġback Ġto ĠFlutter . ĠThe Ġ{@ link ĠMethod Codec } Ġused Ġmust Ġbe Ċ Ġ* Ġcompatible Ġwith Ġthe Ġone Ġused Ġby Ġthe ĠFlutter Ġapplication . ĠThis Ġcan Ġbe Ġachieved Ċ Ġ* Ġby Ġcreating Ġa Ċ Ġ* Ġ< a Ġhref =" https :// docs . flutter . io / flutter / services / Method Channel - class . html "> Method Channel </ a > Ċ Ġ* Ġcounter part Ġof Ġthis Ġchannel Ġon Ġthe ĠDart Ġside . ĠThe ĠJava Ġtype Ġof Ġmethod Ġcall Ġarguments Ġand Ġresults Ġis Ċ Ġ* Ġ{@ code ĠObject }, Ġbut Ġonly Ġvalues Ġsupported Ġby Ġthe Ġspecified Ġ{@ link ĠMethod Codec } Ġcan Ġbe Ġused .</ p > Ċ Ġ* Ċ Ġ* Ġ< p > The Ġlogical Ġidentity Ġof Ġthe Ġchannel Ġis Ġgiven Ġby Ġits Ġname . ĠId entic ally Ġnamed Ġchannels Ġwill Ġinterf ere Ċ Ġ* Ġwith Ġeach Ġother 's Ġcommunication .</ p > Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġchannel Ġassociated Ġwith Ġthe Ġspecified Ġ{@ link ĠBinary Messenger } Ġand Ġwith Ġthe Ċ Ġ* Ġspecified Ġname Ġand Ġ{@ link ĠMethod Codec }. Ċ Ġ* Ċ Ġ* Ġ@ param Ġmess enger Ġa Ġ{@ link ĠBinary Messenger }. Ċ Ġ* Ġ@ param Ġname Ġa Ġchannel Ġname ĠString . Ċ Ġ* Ġ@ param Ġcodec Ġa Ġ{@ link ĠMessage Codec }. Ċ Ġ*/ Ċ class ĠAs ynchronous Method Channel ( ĊĠ Ġmess enger : ĠBinary Messenger , ĊĠ Ġname : ĠString , ĊĠ Ġcodec : ĠMethod Codec Ġ= ĠStandard Method Codec . INSTANCE Ċ ) Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Async Method Channel #" ĊĠĠĠ Ġconst Ġval ĠDEBUG Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġhandle ( call : ĠMethod Call , Ġcallback : ĠMethod Channel . Result , Ġhandler : ĠMethod Call Handler , Ġchannel : ĠAs ynchronous Method Channel ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( call . has Argument ("__ job _ id ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Id Ġ= Ġcall . argument < String >(" __ job _ id ") ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġcall . argument < Any ?> ("__ argument ") ĊĠĠĠĠĠĠĠ Ġval Ġraw Call Ġ= ĠMethod Call ( call . method , Ġarguments ) ĊĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠLog . d ( TAG , Ġ" method # ${ call . method }, jobId #$ jobId , arguments #$ arguments ") ĊĠĠĠĠĠĠĠ Ġhandler . on MethodCall ( raw Call , Ġobject Ġ: ĠResult Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess As ynchronous ( result : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠLog . d ( TAG , Ġ" method # ${ call . method }, jobId #$ jobId , result #$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . invoke As ynchronous Method ("__ result ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"__ job _ id " Ġto Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"__ result " Ġto Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror As ynchronous ( errorCode : ĠString , ĠerrorMessage : ĠString ?, Ġerror Details : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . invoke As ynchronous Method ("__ error ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"__ job _ id " Ġto Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"__ result " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" errorCode " Ġto ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" errorMessage " Ġto ĠerrorMessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" error Details " Ġto Ġerror Details ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnot Implemented () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . not Implemented () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( errorCode : ĠString ?, ĠerrorMessage : ĠString ?, Ġerror Details : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . error ( errorCode , ĠerrorMessage , Ġerror Details ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( result : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . success ( result ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ Ġ} Ġelse Ġhandler . on MethodCall ( call , Ġobject Ġ: ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess As ynchronous ( result : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcallback . success ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror As ynchronous ( errorCode : ĠString , ĠerrorMessage : ĠString ?, Ġerror Details : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcallback . error ( errorCode , ĠerrorMessage , Ġerror Details ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnot Implemented () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcallback . not Implemented () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġerror ( errorCode : ĠString ?, ĠerrorMessage : ĠString ?, Ġerror Details : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcallback . error ( errorCode , ĠerrorMessage , Ġerror Details ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( result : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcallback . success ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġprivate Ġval Ġ_ channel : ĠMethod Channel Ġ= ĠMethod Channel ( messenger , Ġname , Ġcodec ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠInv okes Ġan Ġasynchronous Ġmethod Ġon Ġthis Ġchannel , Ġoptionally Ġexpecting Ġa Ġresult . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ< p > Any Ġun caught Ġexception Ġthrown Ġby Ġthe Ġresult Ġcallback Ġwill Ġbe Ġcaught Ġand Ġlogged .</ p > ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġmethod Ġthe Ġname ĠString Ġof Ġthe Ġmethod . ĊĠĠ Ġ* Ġ@ param Ġarguments Ġthe Ġarguments Ġfor Ġthe Ġinvocation , Ġpossibly Ġnull . ĊĠĠ Ġ* Ġ@ param Ġcallback Ġa Ġ{@ link ĠResult } Ġcallback Ġfor Ġthe Ġinvocation Ġresult , Ġor Ġnull . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġinvoke As ynchronous Method ( method : ĠString , Ġarguments : ĠAny ?, Ġcallback : ĠMethod Channel . Result ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġ_ channel . invoke Method ( method , Ġarguments , Ġcallback ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠInv okes Ġa Ġmethod Ġon Ġthis Ġchannel , Ġexpecting Ġno Ġresult . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġmethod Ġthe Ġname ĠString Ġof Ġthe Ġmethod . ĊĠĠ Ġ* Ġ@ param Ġarguments Ġthe Ġarguments Ġfor Ġthe Ġinvocation , Ġpossibly Ġnull . ĊĠĠ Ġ*/ ĊĠ Ġ@ Deprecated (" Use Ġinvoke As ynchronous Method Ġinstead Ġof Ġinvoke Method ", ĠReplace With (" invoke As ynchronous Method ")) ĊĠ Ġfun Ġinvoke Method ( method : ĠString , Ġarguments : ĠAny ?) Ġ{ ĊĠĠĠ Ġthrow ĠUnsupportedOperationException (" Use Ġinvoke As ynchronous Method Ġinstead Ġof Ġinvoke Method ") ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠInv okes Ġa Ġmethod Ġon Ġthis Ġchannel , Ġoptionally Ġexpecting Ġa Ġresult . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ< p > Any Ġun caught Ġexception Ġthrown Ġby Ġthe Ġresult Ġcallback Ġwill Ġbe Ġcaught Ġand Ġlogged .</ p > ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġmethod Ġthe Ġname ĠString Ġof Ġthe Ġmethod . ĊĠĠ Ġ* Ġ@ param Ġarguments Ġthe Ġarguments Ġfor Ġthe Ġinvocation , Ġpossibly Ġnull . ĊĠĠ Ġ* Ġ@ param Ġcallback Ġa Ġ{@ link ĠResult } Ġcallback Ġfor Ġthe Ġinvocation Ġresult , Ġor Ġnull . ĊĠĠ Ġ*/ ĊĠ Ġ@ Deprecated (" Use Ġinvoke As ynchronous Method Ġinstead Ġof Ġinvoke Method ", ĠReplace With (" invoke As ynchronous Method ")) ĊĠ Ġfun Ġinvoke Method ( method : ĠString , Ġarguments : ĠAny ?, Ġcallback : ĠMethod Channel . Result ?) Ġ{ ĊĠĠĠ Ġthrow ĠUnsupportedOperationException (" Use Ġinvoke As ynchronous Method Ġinstead Ġof Ġinvoke Method ") ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRegisters Ġa Ġmethod Ġcall Ġhandler Ġon Ġthis Ġchannel . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ< p > Overrides Ġany Ġexisting Ġhandler Ġregistration Ġfor Ġ( the Ġname Ġof ) Ġthis Ġchannel .</ p > ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ< p > If Ġno Ġhandler Ġhas Ġbeen Ġregistered , Ġany Ġincoming Ġmethod Ġcall Ġon Ġthis Ġchannel Ġwill Ġbe Ġhandled ĊĠĠ Ġ* Ġsilently Ġby Ġsending Ġa Ġnull Ġreply . ĠThis Ġresults Ġin Ġa ĊĠĠ Ġ* Ġ< a Ġhref =" https :// docs . flutter . io / flutter / services / Missing Plugin Exception - class . html "> Missing Plugin Exception </ a > ĊĠĠ Ġ* Ġon Ġthe ĠDart Ġside , Ġunless Ġan ĊĠĠ Ġ* Ġ< a Ġhref =" https :// docs . flutter . io / flutter / services / Optional Method Channel - class . html "> Optional Method Channel </ a > ĊĠĠ Ġ* Ġis Ġused .</ p > ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġhandler Ġa Ġ{@ link ĠMethod Call Handler }, Ġor Ġnull Ġto Ġdere gister . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġset MethodCall Handler ( handler : ĠMethod Call Handler ) Ġ{ ĊĠĠĠ Ġ_ channel . set MethodCall Handler Ġ{ Ġcall , Ġresult Ġ-> ĊĠĠĠĠĠ Ġhandle ( call , Ġresult , Ġhandler , Ġthis ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAdjust s Ġthe Ġnumber Ġof Ġmessages Ġthat Ġwill Ġget Ġbuffered Ġwhen Ġsending Ġmessages Ġto ĊĠĠ Ġ* Ġchannels Ġthat Ġaren 't Ġfully Ġsetup Ġyet . Ġ ĠFor Ġexample , Ġthe Ġengine Ġisn 't Ġrunning ĊĠĠ Ġ* Ġyet Ġor Ġthe Ġchannel 's Ġmessage Ġhandler Ġisn 't Ġsetup Ġon Ġthe ĠDart Ġside Ġyet . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġresize Channel Buffer ( new Size : ĠInt ) Ġ{ ĊĠĠĠ Ġ_ channel . resize Channel Buffer ( new Size ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠMethod Ġcall Ġresult Ġcallback . ĠSupports Ġdual Ġuse : ĠImplement ations Ġof Ġmethods ĊĠĠ Ġ* Ġto Ġbe Ġinvoked Ġby ĠFlutter Ġact Ġas Ġclients Ġof Ġthis Ġinterface Ġfor Ġsending Ġresults ĊĠĠ Ġ* Ġback Ġto ĠFlutter . ĠInv ok ers Ġof ĠFlutter Ġmethods Ġprovide Ġimplementations Ġof Ġthis ĊĠĠ Ġ* Ġinterface Ġfor Ġhandling Ġresults Ġreceived Ġfrom ĠFlutter . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ< p > All Ġmethods Ġof Ġthis Ġclass Ġmust Ġbe Ġcalled Ġon Ġthe Ġplatform Ġthread Ġ( Android Ġmain Ġthread ). ĠFor Ġmore Ġdetails Ġsee ĊĠĠ Ġ* Ġ< a Ġhref =" https :// github . com / flutter / engine / wiki / Threading - in - the - Flutter - Engine "> Threading Ġin Ġthe ĠFlutter ĊĠĠ Ġ* ĠEngine </ a >.</ p > ĊĠĠ Ġ*/ ĊĠ Ġinterface ĠResult Ġ: ĠMethod Channel . Result Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġa Ġsuccessful Ġasynchronous Ġresult . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresult ĠThe Ġresult , Ġpossibly Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsuccess As ynchronous ( result : ĠAny ?) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġa Ġwrong Ġasynchronous Ġresult . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠerrorCode ĠAn Ġerror Ġcode ĠString . ĊĠĠĠĠ Ġ* Ġ@ param ĠerrorMessage ĠA Ġhuman - readable Ġerror Ġmessage ĠString , Ġpossibly Ġnull . ĊĠĠĠĠ Ġ* Ġ@ param Ġerror Details ĠError Ġdetails , Ġpossibly Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġerror As ynchronous ( errorCode : ĠString , ĠerrorMessage : ĠString ?, Ġerror Details : ĠAny ?) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠA Ġhandler Ġof Ġincoming Ġmethod Ġcalls . ĊĠĠ Ġ*/ ĊĠ Ġinterface ĠMethod Call Handler Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġspecified Ġmethod Ġcall Ġreceived Ġfrom ĠFlutter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > Handler Ġimplementations Ġmust Ġsubmit Ġa Ġresult Ġfor Ġall Ġincoming Ġcalls , Ġby Ġmaking Ġa Ġsingle Ġcall ĊĠĠĠĠ Ġ* Ġon Ġthe Ġgiven Ġ{@ link ĠResult } Ġcallback . ĠFailure Ġto Ġdo Ġso Ġwill Ġresult Ġin Ġl ing ering ĠFlutter Ġresult ĊĠĠĠĠ Ġ* Ġhandlers . ĠThe Ġresult Ġmay Ġbe Ġsubmitted Ġasynchronously . ĠCalls Ġto Ġunknown Ġor Ġunimplemented Ġmethods ĊĠĠĠĠ Ġ* Ġshould Ġbe Ġhandled Ġusing Ġ{@ link ĠResult # not Implemented ()} .</ p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > Any Ġun caught Ġexception Ġthrown Ġby Ġthis Ġmethod Ġwill Ġbe Ġcaught Ġby Ġthe Ġchannel Ġimplementation Ġand ĊĠĠĠĠ Ġ* Ġlogged , Ġand Ġan Ġerror Ġresult Ġwill Ġbe Ġsent Ġback Ġto ĠFlutter .</ p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > The Ġhandler Ġis Ġcalled Ġon Ġthe Ġplatform Ġthread Ġ( Android Ġmain Ġthread ). ĠFor Ġmore Ġdetails Ġsee ĊĠĠĠĠ Ġ* Ġ< a Ġhref =" https :// github . com / flutter / engine / wiki / Threading - in - the - Flutter - Engine "> Threading Ġin Ġthe ĠFlutter ĊĠĠĠĠ Ġ* ĠEngine </ a >.</ p > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcall ĠA Ġ{@ link ĠMethod Call }. ĊĠĠĠĠ Ġ* Ġ@ param Ġresult ĠA Ġ{@ link ĠResult } Ġused Ġfor Ġsubmitting Ġthe Ġresult Ġof Ġthe Ġcall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon MethodCall ( call : ĠMethod Call , Ġresult : ĠResult ) ĊĠ Ġ} Ċ }