import Foundation
import FLAnimatedImage
var flutterMethodChannelPenguinIn : FlutterMethodChannel ? = nil
fileprivate var mainViewController : FlutterViewController !
class HMGPenguinInPlatformBridge {
private let channelName = " launch_penguin_ui "
private static var shared_ : HMGPenguinInPlatformBridge ?
class func initialize ( flutterViewController : FlutterViewController ) {
shared_ = HMGPenguinInPlatformBridge ( )
mainViewController = flutterViewController
shared_ ? . openChannel ( )
}
func shared ( ) -> HMGPenguinInPlatformBridge {
assert ( ( HMGPenguinInPlatformBridge . shared_ != nil ) , " HMGPenguinInPlatformBridge is not initialized, call initialize(mainViewController:MainFlutterVC) function first. " )
return HMGPenguinInPlatformBridge . shared_ !
}
private func openChannel ( ) {
flutterMethodChannelPenguinIn = FlutterMethodChannel ( name : channelName , binaryMessenger : mainViewController . binaryMessenger )
flutterMethodChannelPenguinIn ? . setMethodCallHandler { ( methodCall , result ) in
print ( " Called function \( methodCall . method ) " )
if let arguments = methodCall . arguments as Any ? {
if methodCall . method = = " launchPenguin " {
print ( " ====== launchPenguinView Launched ========= " )
self . launchPenguinView ( arguments : arguments , result : result )
}
} else {
result ( FlutterError ( code : " INVALID_ARGUMENT " , message : " Storyboard name is required " , details : nil ) )
}
}
}
private func launchPenguinView ( arguments : Any , result : @ escaping FlutterResult ) {
let penguinView = PenguinView (
frame : CGRect ( x : 0 , y : 0 , width : UIScreen . main . bounds . width , height : UIScreen . main . bounds . height ) ,
viewIdentifier : 0 ,
arguments : arguments ,
binaryMessenger : mainViewController . binaryMessenger
)
let penguinUIView = penguinView . view ( )
penguinUIView . frame = mainViewController . view . bounds
penguinUIView . autoresizingMask = [ . flexibleWidth , . flexibleHeight ]
mainViewController . view . addSubview ( penguinUIView )
let args = arguments as ? [ String : Any ]
// l e t l o a d e r I m a g e D a t a = a r g s [ " l o a d e r I m a g e " ] a s ? F l u t t e r S t a n d a r d T y p e d D a t a e l s e {
// p r i n t ( " l o a d e r I m a g e d a t a n o t f o u n d i n a r g u m e n t s " )
// r e s u l t ( F l u t t e r E r r o r ( c o d e : " A R G U M E N T _ E R R O R " , m e s s a g e : " M i s s i n g l o a d e r I m a g e d a t a " , d e t a i l s : n i l ) )
// r e t u r n
// }
// l e t l o a d i n g O v e r l a y = U I V i e w ( f r a m e : U I S c r e e n . m a i n . b o u n d s )
// l o a d i n g O v e r l a y . b a c k g r o u n d C o l o r = U I C o l o r . b l a c k . w i t h A l p h a C o m p o n e n t ( 0 . 5 ) / / S e m i - t r a n s p a r e n t o v e r l a y
// l o a d i n g O v e r l a y . a u t o r e s i z i n g M a s k = [ . f l e x i b l e W i d t h , . f l e x i b l e H e i g h t ]
// D i s p l a y t h e G I F u s i n g F L A n i m a t e d I m a g e
// l e t a n i m a t e d I m a g e = F L A n i m a t e d I m a g e ( a n i m a t e d G I F D a t a : l o a d e r I m a g e D a t a . d a t a )
// l e t g i f I m a g e V i e w = F L A n i m a t e d I m a g e V i e w ( )
// g i f I m a g e V i e w . a n i m a t e d I m a g e = a n i m a t e d I m a g e
// g i f I m a g e V i e w . f r a m e = C G R e c t ( x : 0 , y : 0 , w i d t h : U I S c r e e n . m a i n . b o u n d s . w i d t h , h e i g h t : U I S c r e e n . m a i n . b o u n d s . h e i g h t )
// g i f I m a g e V i e w . c e n t e r = l o a d i n g O v e r l a y . c e n t e r
// g i f I m a g e V i e w . c o n t e n t M o d e = . s c a l e A s p e c t F i t
// l o a d i n g O v e r l a y . a d d S u b v i e w ( g i f I m a g e V i e w )
// i f l e t w i n d o w = U I A p p l i c a t i o n . s h a r e d . w i n d o w s . f i r s t {
// w i n d o w . a d d S u b v i e w ( l o a d i n g O v e r l a y )
//
// } e l s e {
// p r i n t ( " E r r o r : M a i n w i n d o w n o t f o u n d " )
// }
penguinView . onSuccess = {
// H i d e a n d r e m o v e t h e l o a d e r
// D i s p a t c h Q u e u e . m a i n . a s y n c {
// l o a d i n g O v e r l a y . r e m o v e F r o m S u p e r v i e w ( )
//
// }
}
result ( nil )
}
}