package Ġcom . he q ing ba o . flutter . plugin . store _ launcher Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Resolve Info Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . annotation . NonNull ; Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġio . flutter . plugin . common . Plugin Registry . Registrar Ċ Ċ /** ĠStore Launcher Plugin Ġ*/ Ċ public Ġclass ĠStore Launcher Plugin Ġ: ĠFlutter Plugin , ĠMethod Call Handler Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine (@ NonNull Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠMethod Channel ( flutter Plugin Binding . get Flutter Engine (). get Dart Executor (), Ġ" store _ launcher ") ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġflutter Plugin Binding . application Context ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( this ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġstatic Ġfunction Ġis Ġoptional Ġand Ġequivalent Ġto Ġon Attached To Engine . ĠIt Ġsupports Ġthe Ġold ĊĠĠĠ Ġ// Ġpre - Flutter - 1 . 1 2 ĠAndroid Ġprojects . ĠYou Ġare Ġencour aged Ġto Ġcontinue Ġsupporting ĊĠĠĠ Ġ// Ġplugin Ġregistration Ġvia Ġthis Ġfunction Ġwhile Ġapps Ġmigrate Ġto Ġuse Ġthe Ġnew ĠAndroid ĠAPIs ĊĠĠĠ Ġ// Ġpost - flutter - 1 . 1 2 Ġvia Ġhttps :// flutter . dev / go / android - project - migration . ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠIt Ġis Ġencour aged Ġto Ġshare Ġlogic Ġbetween Ġon Attached To Engine Ġand Ġregister With Ġto Ġkeep ĊĠĠĠ Ġ// Ġthem Ġfunction ally Ġequivalent . ĠOnly Ġone Ġof Ġon Attached To Engine Ġor Ġregister With Ġwill Ġbe Ġcalled ĊĠĠĠ Ġ// Ġdepending Ġon Ġthe Ġuser 's Ġproject . Ġon Attached To Engine Ġor Ġregister With Ġmust Ġboth Ġbe Ġdefined ĊĠĠĠ Ġ// Ġin Ġthe Ġsame Ġclass . ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġregister With ( regist rar : ĠRegist rar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠMethod Channel ( regist rar . messenger (), Ġ" store _ launcher ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( Store Launcher Plugin ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall (@ NonNull Ġcall : ĠMethod Call , Ġ@ NonNull Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( call . method Ġ== Ġ" open With Store ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! call . has Argument (" app _ id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" 1 ", Ġ" Missing ĠParameter Ġin Ġmethod : Ġ(${ call . method })", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName : ĠString Ġ= Ġcall . argument (" app _ id ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( open With Play Store ( packageName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success (" ok ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" 1 ", Ġ" Unknown ĠError Ġin Ġmethod : Ġ(${ call . method })", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine (@ NonNull Ġbinding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen With Play Store ( appId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse (" market :// details ? id =$ appId ")) ĊĠĠĠĠĠĠĠ Ġvar Ġmarket Fo unded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġapps : ĠList < Resolve Info > Ġ= Ġcontext . package Manager . query Intent Activities ( intent , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( app Ġin Ġapps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app . activity Info . application Info . packageName Ġ!= Ġ" com . android . v ending ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġact Ġ= Ġapp . activity Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= ĠComponent Name ( act . application Info . packageName , Ġact . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġit Ġdoes ĠNOT Ġopen Ġin Ġthe Ġstack Ġof Ġyour Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtask Ġre parent ing Ġif Ġneeded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ RESET _ TASK _ IF _ NE EDED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthe ĠGoogle ĠPlay Ġwas Ġalready Ġopen Ġin Ġa Ġsearch Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġthis Ġmake Ġsure Ġit Ġstill Ġgo Ġto Ġthe Ġapp Ġpage Ġyou Ġrequested ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġmake Ġsure Ġonly Ġthe ĠGoogle ĠPlay Ġapp Ġis Ġallowed Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġintercept Ġthe Ġintent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . component Ġ= Ġcomponent Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarket Fo unded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! market Fo unded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse (" https :// play . google . com / store / apps / details ? id =$ appId ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( web Intent . resolve Activity ( context . package Manager ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ