\ didPopRoutehandleStartBackGesturehandleUpdateBackGestureProgresshandleCommitBackGesturehandleCancelBackGesture didPushRoutedidPushRouteInformationdidChangeMetricsdidChangeTextScaleFactordidChangePlatformBrightnessdidChangeLocalesdidChangeAppLifecycleStatedidChangeViewFocusdidRequestAppExitdidHaveMemoryPressuredidChangeAccessibilityFeatures initInstancesinstance _instance debugShowWidgetInspectorOverride(debugShowWidgetInspectorOverrideNotifier/_debugShowWidgetInspectorOverrideNotifierObject)debugWidgetInspectorSelectionOnTapEnabled8_debugWidgetInspectorSelectionOnTapEnabledNotifierObjectresetInternalState_debugAddStackFiltersinitServiceExtensions _forceRebuild buildOwner _buildOwner focusManagerplatformMenuDelegate _observers addObserverremoveObserverhandleRequestAppExithandleMetricsChangedhandleTextScaleFactorChangedhandlePlatformBrightnessChanged"handleAccessibilityFeaturesChangedhandleLocaleChangeddispatchLocalesChanged$dispatchAccessibilityFeaturesChangedhandlePopRoute_backGestureObserver_handleStartBackGesture _handleUpdateBackGestureProgress_handleCommitBackGesture_handleCancelBackGesturehandlePushRoute_handlePushRouteInformation_handleNavigationInvocation_handleBackGestureInvocationhandleAppLifecycleStateChangedhandleViewFocusChangedhandleMemoryPressure_needToReportFirstFrame_firstFrameCompleterfirstFrameRasterizedwaitUntilFirstFrameRasterizeddebugDidSendFirstFrameEvent_handleBuildScheduleddebugBuildingDirtyElements drawFrame rootElement _rootElementrenderViewElement_readyToProduceFrames framesEnabledwrapWithDefaultViewscheduleAttachRootWidgetattachRootWidgetattachToBuildOwnerisRootWidgetAttachedperformReassemblecomputePlatformResolvedLocalechilddebugShortDescription createElementattach toStringShort_child visitChildren forgetChildmountupdate _newWidgetperformRebuild_rebuilddebugDoingBuilddebugExpectsRenderObjectForSlotensureInitialized WidgetsBindingObserverWidgetsBindingrunApp runWidget _runWidget_debugDumpAppString debugDumpApp RootWidget RootElementWidgetsFlutterBinding�1AccessibilityFeaturesAppExitResponseAppLifecycleState FrameTimingLocalePlatformDispatcherTimingsCallbackViewFocusEvent addObserverremoveObserver MediaQueryState WidgetsApp NavigatorSystemChannels navigationFutureboolvalue$PredictiveBackPageTransitionsBuilderPredictiveBackEventvoid DeprecatedStringRouteInformationuriUridecodeComponentpathisEmptyqueryParametersqueryParametersAllfragmenttoStringStatefulWidgetsizeOftextScaleFactorOfplatformBrightnessOfList lifecycleAppLifecycleListener FlutterView BuildContextcancelServicesBindingexitApplicationexitsystemElement rootElementattachRootWidgetRendererBinding renderObject RenderObjectViewViewCollectionRenderObjectWidgetInheritedWidget ViewAnchordebugExpectsRenderObjectForSlotRenderObjectElement BindingBaseSchedulerBindingGestureBindingSemanticsBindingoverride initInstances _instance_debugAddStackFilters _buildOwner BuildOwner buildOwneronBuildScheduled_handleBuildScheduledplatformDispatcheronLocaleChangedhandleLocaleChangedsetMethodCallHandler_handleNavigationInvocation backGesture_handleBackGestureInvocationFlutterErrorDetailspropertiesTransformersadddebugTransformDebugCreatorplatformMenuDelegateDefaultPlatformMenuDelegateensureInitialized checkInstance(debugShowWidgetInspectorOverrideNotifier debugShowWidgetInspectorOverride ValueNotifier/_debugShowWidgetInspectorOverrideNotifierObject8_debugWidgetInspectorSelectionOnTapEnabledNotifierObjectvisibleForTestingresetInternalStatedisposePartialStackFramepackage classNamemethod FlutterErroraddDefaultStackFilterRepetitiveStackFrameFilterframes replacementinitServiceExtensions kReleaseModeregisterServiceExtensionnameWidgetsServiceExtensions debugDumpAppcallbackMapObjectdebugDumpFocusTree focusManager toStringDeepkIsWebregisterBoolServiceExtensionshowPerformanceOverlaygettershowPerformanceOverlayOverridesetter _forceRebuilddidSendFirstFrameEventdynamic_needToReportFirstFrame didSendFirstFrameRasterizedEventfirstFrameRasterizedprofileWidgetBuildsdebugProfileBuildsEnabledprofileUserWidgetBuilds$debugProfileBuildsEnabledUserWidgetsdebugAllowBannerdebugAllowBannerOverrideWidgetInspectorServiceinstance reassemble endOfFrame FocusScopeofFocusScopeNode FocusManagerPlatformMenuBarPlatformMenuDelegate _observers_backGestureObserverremoveobserverdidRequestAppExithandleMetricsChangeddidChangeMetricshandleTextScaleFactorChangeddidChangeTextScaleFactorhandlePlatformBrightnessChangeddidChangePlatformBrightness"handleAccessibilityFeaturesChangeddidChangeAccessibilityFeaturesdispatchLocalesChanged protected mustCallSuperlocalesdidChangeLocalesonAccessibilityFeaturesChanged didPopRouteSystemNavigatorpopsetFrameworkHandlesBackPopScopeNavigationNotificationfromMaphandleStartBackGesturehandleUpdateBackGestureProgresshandlePopRoutehandleCommitBackGesturehandleCancelBackGesture didPushRouteparsedidPushRouteInformationstate MethodCallhandlePushRoute arguments_handlePushRouteInformationcast_handleStartBackGesture _handleUpdateBackGestureProgress_handleCommitBackGesture_handleCancelBackGestureMissingPluginExceptionhandleAppLifecycleStateChangeddidChangeAppLifecycleStatehandleViewFocusChangeddidChangeViewFocushandleMemoryPressuredidHaveMemoryPressure CompleterwaitUntilFirstFrameRasterized_firstFrameCompleter isCompletedfuturedebugBuildingDirtyElements fromPartsDiagnosticsNode ErrorSummaryErrorDescription ErrorHintensureVisualUpdatehandleDrawFramehandleBeginFrame onBeginFramescheduleFrameCallbackTickerAnimationController Animation onDrawFrame drawFramebuildsetState performLayoutmarkNeedsLayoutmarkNeedsCompositingBitsUpdatepaintLayermarkNeedsPaintSceneassembleSemanticsNode SemanticsNodemarkNeedsSemanticsUpdate PipelineOwner finalizeTreeaddPostFrameCallbackUserTag defaultTag makeCurrentTimeline instantSync postEventremoveTimingsCallbackcompleteaddTimingsCallback buildScopesendFramesToEngine _rootElement framesEnabled_readyToProduceFrames implicitView StateErrorWidgetview9deprecatedDoNotUseWillBeRemovedWithoutNoticePipelineOwner pipelineOwner6deprecatedDoNotUseWillBeRemovedWithoutNoticeRenderView renderViewchildTimerrunRenderObjectToWidgetAdapterattachToRenderTreeattachToBuildOwnerdebugShortDescription WidgetTesterrestartAndRestoreattach pumpWidgetTestWidgetsFlutterBindingperformReassemblelocaleListResolutionCallbackcomputePlatformResolvedLocaleAlignCenterSizedBoxshrinkwrapWithDefaultViewviewsdebugCheckZonescheduleAttachRootWidgetscheduleWarmUpFrame kDebugMode StringBufferwriteln runtimeType debugPrintelement lockState assignOwnermount _newWidgetmarkNeedsBuild toStringShortRootElementMixinElementVisitor forgetChildperformRebuildupdatewidget updateChild exceptionstacklibrarycontext reportErrorPaintingBinding testWidgets BindingBaseServicesBindingSchedulerBindingGestureBindingRendererBindingSemanticsBindingWidgetElementRootElementMixinPaintingBindingWidgetsBinding0wd.`uWÄÆAg,$F…m…‹AppLifecycleStateLocale…\dart:ui‚l dart:async‚‚‚™‚œ developer‚œdart:developer‚¾ƒŽAccessibilityFeaturesAppExitResponseAppLifecycleState FrameTimingLocalePlatformDispatcherTimingsCallbackViewFocusEvent‚©dart:uiƒ”package:flutter/foundation.dartƒ¿package:flutter/gestures.dartƒèpackage:flutter/rendering.dart„package:flutter/scheduler.dart„<package:flutter/services.dart„gapp.dart„{ debug.dart„‘focus_manager.dart„¯framework.dart„Éplatform_menu_bar.dart„ë router.dart…service_extensions.dart…% view.dart…:widget_inspector.dartÀ®|À«†ã=€ˆ€§€©€Ä€ö�'�a�f�†�µ�Ó�÷‚‚=‚_‚i‚k‚�‚¨‚º‚Ä‚ä‚þƒƒ0ƒAƒ^ƒxƒ‘ƒ“ƒ¾ƒç„„;„d„f„z„�„®„Ȅꅅ$…9…Z…\…Ž…�…©…͆X†Z†£†¨†÷‡.‡w‡Àˆˆ ˆ[ˆŸˆí‰-‰2‰„‰Ò‰þŠMŠtŠyŠŽŠÏ‹‹T‹Y‹ª‹ê‹ïŒFŒWŒ†ŒÔ� ��Z�“�š�ÜŽ$ŽgެŽÒŽÙ��9�@�v�²�´�í�ô�F�‘�ã‘3‘:‘‡‘Õ’’W’^’ª’é“8“H“O“—“·“ÿ””5”<”Ž”½”Ä• •,•v•x•Ê•ú––S–›–ê–ñ—9—Y—~—€—Í—í—ô˜F˜u˜|˜Ä˜ä™ ™ ™Z™l™s™µ™üš!š(šeš‰š™šÆ›››O›Q›‘›Ô›Ûœœdœ‰œ�œØœü��U�¨�÷žžSž~ž˜ž´žÂžöŸRŸ“ŸªŸ´Ÿ¼ŸÁŸÃ  ( / ] “ š ± ¸ ý¡M¡¡†¡•¡Ê¡ø¡ÿ¢¢Z¢c¢j¢È¢æ¢í£££:£p£{£‚£•£½£ç¤H¤w¤­¤¸¤¿¤Ò¤ì¥%¥A¥L¥S¥f¥‰¥Ñ¥Ü¥ã¥ö¦$¦X¦c¦l¦w¦Š¦‘¦Û§*§?§F§W§^§¨§¿§Ý§ß¨¨#¨k¨±¨Å¨Ì¨ú©8©?©V©]©l©©©ß©æ©ùªQªZªaªÏªâªþ««R«]«d«w«‘«Ê«æ«ñ«ø¬#¬*¬=¬h¬Ø¬ã¬ê¬ý­+­r­}­†­‘­¤­«­¼­Ã®®/®U®W®‹®’®À¯¯¯¯ ¯r¯�¯¶¯¸¯ÿ°D°U°\°Š°¿°ò°ô±<±^±e±²±ï±ö²@²G²X²_²¦²Ï³³³a³‹³’³Þ³ì³ó´@´’´â´üµ0µ2µ„µ‹µÝ¶¶¶e¶l¶}¶„¶Ø¶ý·4·V·[·]·•·œ·Þ·þ¸!¸#¸s¸„¸‹¸¹¸ý¹)¹,¹.¹n¹s¹Æºº+º0ºUºZº¨ºÚºß»/»I»N»�»í¼<¼Ž¼à¼ÿ½½T½¥½ñ¾<¾Š¾Ø¿(¿u¿Â¿Ý¿âÀ@2À@ƒÀ@ÊÀA ÀAÀA_ÀAdÀA´ÀBÀBTÀB�ÀB³ÀB»ÀBÑÀBëÀCÀCÀC9ÀCUÀCbÀC|ÀC˜ÀC¯ÀC±ÀCÂÀCâÀCöÀDÀDÀD@ÀD�ÀDËÀDìÀE'ÀEfÀE¸ÀF ÀFÀFpÀF„ÀF�ÀFÊÀFÏÀFÑÀGÀGÀGeÀG·ÀGõÀHDÀHiÀHkÀH¦ÀH­ÀHøÀHÿÀIBÀIIÀIœÀIîÀJ=ÀJÀJ®ÀJêÀJïÀJñÀK'ÀKdÀKiÀKkÀK£ÀKêÀLAÀLŠÀLŒÀLÜÀMÀMÀMfÀM¶ÀMþÀN]ÀN¯ÀN±ÀNÇÀNÔÀNóÀO\ÀO}ÀO¾ÀOûÀPEÀP‹ÀP�ÀP’ÀP´ÀPûÀQ9ÀQVÀQvÀQ~ÀQÃÀRÀRÀR<ÀRDÀR…ÀRÃÀRàÀRúÀSÀSSÀS‘ÀS·ÀSØÀSàÀT-ÀTkÀT‘ÀT¯ÀT·ÀTÿÀU=ÀUcÀU{ÀUƒÀUÏÀV ÀV2ÀVPÀVXÀV›ÀVÙÀW ÀW%ÀW-ÀWvÀW´ÀWÙÀWúÀXÀXÀXMÀXOÀXsÀXœÀXÅÀXëÀY ÀY+ÀYVÀYqÀY˜ÀYºÀYÆÀYïÀYùÀZÀZ*ÀZSÀZyÀZ˜ÀZÃÀZÞÀ[À['À[3À[\À[fÀ[nÀ[pÀ[“À[¼À[åÀ\ À\,À\KÀ\vÀ\™À\´À\ÛÀ]À]#À]/À]XÀ]bÀ]jÀ]“À]¼À]âÀ^À^,À^OÀ^jÀ^‘À^·À^ÙÀ^åÀ_À_À_ À_"À_TÀ_}À_¦À`À`1À`;À`CÀ`lÀ`•À`áÀa ÀaÀaÀa!Àa#Àa0ÀaRÀavÀaxÀa’Àa³ÀaîÀb*Àb`Àb’ÀbžÀb¨ÀbªÀbËÀc ÀcHÀc„Àc¶ÀcÂÀcÌÀcÎÀcäÀd ÀdRÀdªÀdÌÀeÀe?ÀeNÀeŽÀe³ÀeÁÀeÍÀeÖÀeØÀeùÀf>Àf]Àf‚ÀfÅÀgÀgPÀg”Àg¢Àg®Àg¸ÀgºÀgÛÀh*ÀhIÀhnÀh±ÀiÀi<Ài}Ài‹Ài—Ài¡Ài£ÀiîÀjÀjUÀj�Àj³ÀjáÀjíÀj÷ÀkÀkbÀk¥ÀkËÀlÀlÀlÀl!Àl#Àl4ÀlYÀl˜ÀlèÀmÀmGÀmqÀm~Àm¶ÀmÙÀmåÀmïÀmñÀnIÀnKÀn_ÀnjÀnoÀnqÀn“Àn³ÀnàÀnúÀoÀo#Ào(Ào*ÀotÀoŸÀoÍÀpÀpbÀp‹Àp§Àp©ÀpØÀpßÀq.ÀqfÀqmÀq™ÀqØÀqÚÀr)ÀrsÀrzÀrÇÀrßÀsÀsÀscÀseÀs¦ÀsëÀt-ÀtlÀt³ÀtºÀtýÀuAÀu†ÀuÄÀv ÀvBÀvIÀvZÀvaÀv¯ÀvþÀwPÀwRÀwšÀwÞÀwñÀwøÀx ÀxÀx`Àx¯ÀxéÀyÀy:ÀyAÀyjÀyoÀyqÀy~Ày¸ÀyÕÀz7Àz„ÀzŸÀzìÀ{4À{zÀ{ƒÀ{ŠÀ{ÑÀ{ÖÀ{ØÀ{åÀ|À|)À|‹À|¯À|¶À|»À|½À|ÊÀ|óÀ}À}€À}¬À}³À}¸À}ºÀ}ÇÀ}óÀ~!À~ƒÀ~²À~¹À~¾À~ÀÀ~ÍÀ~üÀ-À�ÀÁÀÈÀÍÀÏÀýÀ€À€KÀ€RÀ€‹À€™À€«À€ÁÀ€áÀ�À�À�!À�dÀ�§À�ÂÀ�ÉÀ‚À‚GÀ‚UÀ‚gÀ‚ŸÀƒÀƒ,Àƒ3Àƒ8Àƒ:Àƒ‰ÀƒÝÀ„ À„À„WÀ„¬À„ºÀ„ÌÀ„ýÀ…_À…‘À…˜À…�À…ŸÀ…ÕÀ…ÜÀ†À†cÀ†°À‡À‡.À‡5À‡xÀ‡¾À‡ÚÀ‡áÀˆÀˆAÀˆHÀˆ�Àˆ¨Àˆ¯ÀˆúÀ‰IÀ‰PÀ‰¡À‰óÀŠEÀŠ“ÀŠåÀ‹À‹À‹pÀ‹¸ÀŒÀŒMÀŒšÀŒÁÀŒ×ÀŒåÀŒûÀ�$À�†À�±À�ÇÀ�ÐÀ�×À�óÀŽÀŽ ÀŽ ÀŽ^ÀŽ�ÀŽ‘ÀŽÜÀŽþÀ�QÀ�³À�ìÀ�À�@À�IÀ�PÀ�wÀ�|À�~À�ØÀ‘À‘À‘À‘À‘lÀ‘³À‘¸À‘ºÀ‘íÀ’À’hÀ’¹À“ À“XÀ“‰À“¨À“·À“¾À“ôÀ“ùÀ“ûÀ”.À”WÀ”fÀ”mÀ”oÀ”¥À”ªÀ”¬À”óÀ•À• À•>À•ŽÀ•ÛÀ–$À–+À–hÀ–ŒÀ–šÀ–¬À–ÂÀ–øÀ—PÀ—²À—ùÀ˜À˜À˜À˜2À˜7À˜9À˜“À˜ÔÀ™À™CÀ™KÀ™­À™ôÀš ÀšÀšÀš-Àš2Àš4ÀšyÀš¢ÀšÉÀ›À›NÀ›†À›�À›½À›äÀ›ìÀ›ñÀ›óÀœ<ÀœjÀœ¿ÀœèÀ�*À�~À�¸À�òÀžÀž&Àž+Àž-Àž:Àž|Àž®ÀŸÀŸCÀŸJÀŸOÀŸQÀŸ^ÀŸ•ÀŸ¿À !À LÀ SÀ XÀ ZÀ gÀ ˆÀ «À¡ À¡6À¡=À¡BÀ¡DÀ¡lÀ¡nÀ¡±À¡³À¡õÀ¡üÀ¢OÀ¢ À¢åÀ¢ìÀ¢ýÀ£À£VÀ£nÀ£´À£¶À¤À¤À¤À¤nÀ¤¿À¥À¥ À¥À¥#À¥oÀ¥ÁÀ¥ÃÀ¥ùÀ¦À¦GÀ¦tÀ¦{À¦ŒÀ¦“À¦åÀ§*À§,À§NÀ§—À§¿À§ÐÀ§ùÀ¨2À¨lÀ¨‰À¨×À©À©+À©AÀ©ŽÀ©®À©ýÀªPÀª¥ÀªùÀ«OÀ«¥À«ëÀ¬=À¬|À¬ÃÀ¬ÑÀ¬ÞÀ¬çÀ¬ûÀ­À­!À­&À­(À­kÀ­�À­¤À­áÀ­èÀ®À®&À®RÀ®TÀ®–À®�À®çÀ¯1À¯?À¯FÀ¯zÀ¯�À¯ÓÀ°"À°sÀ°´À±À±'À±.À±~À±ÐÀ²À²9À²@À²�À²×À³$À³SÀ³ZÀ³¥À³õÀ´GÀ´\À´cÀ´´ÀµÀµHÀµOÀµ—ÀµÆÀµüÀ¶À¶NÀ¶ À¶îÀ·À· À·ZÀ·rÀ·yÀ·ÉÀ¸À¸HÀ¸™À¸¼À¸ÃÀ¸þÀ¹À¹PÀ¹ À¹ÚÀº ÀºÀº`Àº°ÀºÕÀºÛÀ»$À»1À»GÀ»qÀ»‚À»¬À»ÀÀ»ËÀ»ÍÀ»÷À¼$À¼HÀ¼zÀ¼|À¼¶À¼âÀ½À½RÀ½¢À½ñÀ¾)À¾`À¾¬À¾÷À¿À¿QÀ¿uÀ¿ŸÀ¿©À¿ôÀÀBÀÀƒÀÀÍÀÀÔÀÀÖÀÀáÀÁÀÁ2ÀÁ;ÀÁUÀÁhÀÁ¡ÀÁ·ÀÁÄÀÁçÀÁøÀ ÀÂ8ÀÂNÀÂ[ÀÂbÀÂ|À¸ÀÃÀÃÀÃÀÃ;ÀÃyÀÃÊÀÃèÀÄÀÄ\ÀÄcÀÄhÀÄjÀIJÀĹÀÄ÷ÀÅ$ÀÅ>ÀÅ@ÀŃÀÅŠÀŬÀżÀÅÝÀÆÀÆÀÆOÀÆQÀÆxÀÆzÀƇÀÆÒÀÆÔÀÇ%ÀÇ,ÀÇ{ÀÇÑÀÈ'ÀÈ7ÀÈ>ÀȉÀÈ¥ÀÈØÀÉ ÀÉ%ÀÉrÀÉÀÀÊ ÀÊ<ÀÊ�ÀÊÃÀË ÀË^ÀËyÀËÎÀËØÀËßÀËáÀËóÀÌ"ÀÌsÀ̾ÀÌØÀÌàÀÌåÀÌçÀÍ!ÀÍ(ÀÍwÀÍÅÀÍÓÀÎ ÀÎÀÎBÀÎKÀÎPÀÎRÀÎ�ÀίÀζÀÎöÀÎýÀÏÀÏÀÏbÀÏ—ÀÏÅÀÐÀÐ#ÀÐ%ÀÐtÀЉÀÐ�ÀÐáÀÐèÀÑ7ÀÑ~ÀÑÏÀÑëÀÒÀÒSÀÒvÀÒÃÀÒàÀÓÀÓÀÓ#ÀÓ%ÀÓ\ÀÓcÀÓ´ÀÓ÷ÀÔ1ÀÔ3ÀÔ@ÀÔfÀÔwÀÔ³ÀÔÇÀÔÒÀÔÔÀÔôÀÕ!ÀÕ(ÀÕOÀÕTÀÕVÀÕ˜ÀÕŸÀÕÓÀÖ"ÀÖrÀÖ½ÀÖäÀÖëÀ×:À×xÀ×ÀרÀ×üÀØÀØ3ÀØ:ÀØhÀعÀÙ ÀÙ^ÀÙsÀÙzÀÙÎÀÙçÀÚbÀÚ‰ÀÚ�ÀÚæÀÛ-ÀÛ4ÀÛ„ÀÛÑÀÛíÀÛôÀÜHÀÜ“ÀÜ®ÀÜøÀÝHÀÝMÀÝPÀÝRÀÝ‹ÀÝ�ÀÝðÀÞ4ÀÞ„ÀÞÕÀßÀßÀßhÀß³ÀàÀà:Àà?ÀàŽÀàÝÀá*ÀáwÀá¥ÀáªÀáóÀáøÀâ)ÀâFÀâKÀâ›ÀâìÀã;ÀãˆÀã–Àã›ÀãåÀäÀä$ÀäqÀäŸÀä³Àä¸ÀåÀåBÀåGÀåyÀå³Àå¸ÀæÀæQÀæžÀæèÀç3ÀçZÀçnÀçsÀçäÀè2ÀèoÀètÀèƒÀèˆÀèÑÀéÀéXÀérÀéÃÀéîÀê<Àê€Àê›ÀêèÀë,Àë/Àë1ÀënÀësÀëÓÀì$ÀìvÀìÆÀíÀícÀí²ÀíöÀíûÀîÀî^Àî�Àî•Àî¢Àî²Àî¿ÀîÝÀîüÀïÀïÀïÀï(Àï-Àï|ÀïÌÀðÀðiÀðˆÀð�ÀðÖÀðÛÀñ ÀñÀñYÀñ¤ÀñÁÀñÆÀñõÀñúÀòkÀòºÀòóÀòøÀóÀó Àó[ÀórÀóÃÀóÝÀô.ÀôYÀô§ÀôëÀõ ÀõVÀõ€ÀõƒÀõ…ÀõÔÀöÀöÀö8ÀöVÀöYÀö[Àö{Àö’Àö¤Àö¾ÀöØÀöôÀ÷À÷@À÷…À÷»ÀøÀøÀøEÀøJÀøgÀøjÀølÀø­ÀøÄÀøêÀøíÀøïÀùÀù#ÀùuÀù£Àù¨ÀùöÀú ÀúCÀúbÀú¬Àú®ÀúßÀúæÀûÀû0Àû2ÀûtÀûœÀûžÀû«ÀûàÀûâÀü+Àü2ÀüƒÀüÔÀüÛÀý-ÀýYÀý›Àý·ÀýÓÀý÷ÀþÀþ?ÀþJÀþqÀþ®Àþ¹ÀþÇÀþéÀÿ ÀÿÀÿ'Àÿ,Àÿ.Àÿ;ÀÿˆÀÿ‹Àÿ�Àÿ°ÀÿµÀÀRÀ|À�ÀÎÀÀgÀvÀ±ÀïÀÀÀ.À0À=ÀmÀˆÀ¡À¨À­À¯À¼ÀáÀÿÀÀ2À7À9ÀFÀxÀ©ÀÌÀÝÀúÀ2À7À9ÀFÀmÀ‹À­À¾ÀÃÀÅÀÿÀ)ÀDÀFÀSÀnÀ�ÀÐÀïÀ À:ÀTÀ[ÀxÀ™ÀžÀ ÀµÀÀÀÀ6ÀvÀ•À¬ÀÑÀÀÀIÀŸÀµÀ¼ÀÁÀÃÀÐÀ "À $À 1À �À ÍÀ ÐÀ ÒÀ À À fÀ kÀ ¬À íÀ À "À gÀ «À ôÀ -À fÀ ŸÀ ×À À À +À FÀ `À zÀ •À ¯À ÉÀÀHÀŽÀšÀ¡ÀèÀÀÀaÀ¡ÀÅÀûÀ*ÀWÀwÀ~À£À¨À«�©/// @docImport 'dart:ui'; /// @docImport 'package:flutter/animation.dart'; /// @docImport 'package:flutter/material.dart'; /// @docImport 'package:flutter_test/flutter_test.dart'; /// /// @docImport 'adapter.dart'; /// @docImport 'app_lifecycle_listener.dart'; /// @docImport 'basic.dart'; /// @docImport 'focus_scope.dart'; /// @docImport 'media_query.dart'; /// @docImport 'navigator.dart'; /// @docImport 'pop_scope.dart';‚k‚�‚�‚œ‚¨‚¾ƒŽƒ“ƒ¾ƒç„„;„f„z„�„®„Ȅꅅ$…9…\…m…‹†Z²ÐŒlŒl…ß/// Interface for classes that register with the Widgets layer binding. /// /// This can be used by any class, not just widgets. It provides an interface /// which is used by [WidgetsBinding.addObserver] and /// [WidgetsBinding.removeObserver] to notify objects of changes in the /// environment, such as changes to the device metrics or accessibility /// settings. It is used to implement features such as [MediaQuery]. /// /// This class can be extended directly, or mixed in, to get default behaviors /// for all of the handlers. Alternatively it can be used with the /// `implements` keyword, in which case all the handlers must be implemented /// (and the analyzer will list those that have been omitted). /// /// To start receiving notifications, call `WidgetsBinding.instance.addObserver` /// with a reference to the object implementing the [WidgetsBindingObserver] /// interface. To avoid memory leaks, call /// `WidgetsBinding.instance.removeObserver` to unregister the object when it /// reaches the end of its lifecycle. /// /// {@tool dartpad} /// This sample shows how to implement parts of the [State] and /// [WidgetsBindingObserver] protocols necessary to react to application /// lifecycle messages. See [didChangeAppLifecycleState]. /// /// To respond to other notifications, replace the [didChangeAppLifecycleState] /// method in this example with other methods from this class. /// /// ** See code in examples/api/lib/widgets/binding/widget_binding_observer.0.dart ** /// {@end-tool}Œˆƒ(�…�…‚¿/// Called when the system tells the app to pop the current route, such as /// after a system back button press or back gesture. /// /// Observers are notified in registration order until one returns /// true. If none return true, the application quits. /// /// Observers are expected to return true if they were able to /// handle the notification, for example by closing an active dialog /// box, and false otherwise. The [WidgetsApp] widget uses this /// mechanism to notify the [Navigator] widget that it should pop /// its current route if possible. /// /// This method exposes the `popRoute` notification from /// [SystemChannels.navigation]. /// /// {@macro flutter.widgets.AndroidPredictiveBack}�¶„G“¾“¾ƒÉ/// Called at the start of a predictive back gesture. /// /// Observers are notified in registration order until one returns true or all /// observers have been notified. If an observer returns true then that /// observer, and only that observer, will be notified of subsequent events in /// this same gesture (for example [handleUpdateBackGestureProgress], etc.). /// /// Observers are expected to return true if they were able to handle the /// notification, for example by starting a predictive back animation, and /// false otherwise. [PredictiveBackPageTransitionsBuilder] uses this /// mechanism to listen for predictive back gestures. /// /// If all observers indicate they are not handling this back gesture by /// returning false, then a navigation pop will result when /// [handleCommitBackGesture] is called, as in a non-predictive system back /// gesture. /// /// Currently, this is only used on Android devices that support the /// predictive back feature.“Õ“ê“é”�q•3•3�/// Called when a predictive back gesture moves. /// /// The observer which was notified of this gesture's [handleStartBackGesture] /// is the same observer notified for this. /// /// Currently, this is only used on Android devices that support the /// predictive back feature.•S•h•g•z‚—`—`�Å/// Called when a predictive back gesture is finished successfully, indicating /// that the current route should be popped. /// /// The observer which was notified of this gesture's [handleStartBackGesture] /// is the same observer notified for this. If there is none, then a /// navigation pop will result, as in a non-predictive system back gesture. /// /// Currently, this is only used on Android devices that support the /// predictive back feature.—‚�…˜ë˜ë�K/// Called when a predictive back gesture is canceled, indicating that no /// navigation should occur. /// /// The observer which was notified of this gesture's [handleStartBackGesture] /// is the same observer notified for this. /// /// Currently, this is only used on Android devices that support the /// predictive back feature.™ ‚@››�b/// Called when the host tells the application to push a new route onto the /// navigator. /// /// Observers are expected to return true if they were able to /// handle the notification. Observers are notified in registration /// order until one returns true. /// /// This method exposes the `pushRoute` notification from /// [SystemChannels.navigation].›" ›*›)š‹šŒš–›š�šÊ›S„lžž‚2/// Called when the host tells the application to push a new /// [RouteInformation] and a restoration state onto the router. /// /// Observers are expected to return true if they were able to /// handle the notification. Observers are notified in registration /// order until one returns true. /// /// This method exposes the `pushRouteInformation` notification from /// [SystemChannels.navigation]. /// /// The default implementation is to call the [didPushRoute] directly with the /// string constructed from [RouteInformation.uri]'s path and query parameters.ž-!ž?ž>ŸÅˆ§Æ§Æ‡;/// Called when the application's dimensions change. For example, /// when a phone is rotated. /// /// This method exposes notifications from /// [dart:ui.PlatformDispatcher.onMetricsChanged]. /// /// {@tool snippet} /// /// This [StatefulWidget] implements the parts of the [State] and /// [WidgetsBindingObserver] protocols necessary to react when the device is /// rotated (or otherwise changes dimensions). /// /// ```dart /// class MetricsReactor extends StatefulWidget { /// const MetricsReactor({ super.key }); /// /// @override /// State createState() => _MetricsReactorState(); /// } /// /// class _MetricsReactorState extends State with WidgetsBindingObserver { /// late Size _lastSize; /// /// @override /// void initState() { /// super.initState(); /// WidgetsBinding.instance.addObserver(this); /// } /// /// @override /// void didChangeDependencies() { /// super.didChangeDependencies(); /// // [View.of] exposes the view from `WidgetsBinding.instance.platformDispatcher.views` /// // into which this widget is drawn. /// _lastSize = View.of(context).physicalSize; /// } /// /// @override /// void dispose() { /// WidgetsBinding.instance.removeObserver(this); /// super.dispose(); /// } /// /// @override /// void didChangeMetrics() { /// setState(() { _lastSize = View.of(context).physicalSize; }); /// } /// /// @override /// Widget build(BuildContext context) { /// return Text('Current size: $_lastSize'); /// } /// } /// ``` /// {@end-tool} /// /// In general, this is unnecessary as the layout system takes care of /// automatically recomputing the application geometry when the application /// size changes. /// /// See also: /// /// * [MediaQuery.sizeOf], which provides a similar service with less /// boilerplate.§á†r®6®6…¶/// Called when the platform's text scale factor changes. /// /// This typically happens as the result of the user changing system /// preferences, and it should affect all of the text sizes in the /// application. /// /// This method exposes notifications from /// [dart:ui.PlatformDispatcher.onTextScaleFactorChanged]. /// /// {@tool snippet} /// /// ```dart /// class TextScaleFactorReactor extends StatefulWidget { /// const TextScaleFactorReactor({ super.key }); /// /// @override /// State createState() => _TextScaleFactorReactorState(); /// } /// /// class _TextScaleFactorReactorState extends State with WidgetsBindingObserver { /// @override /// void initState() { /// super.initState(); /// WidgetsBinding.instance.addObserver(this); /// } /// /// @override /// void dispose() { /// WidgetsBinding.instance.removeObserver(this); /// super.dispose(); /// } /// /// late double _lastTextScaleFactor; /// /// @override /// void didChangeTextScaleFactor() { /// setState(() { _lastTextScaleFactor = WidgetsBinding.instance.platformDispatcher.textScaleFactor; }); /// } /// /// @override /// Widget build(BuildContext context) { /// return Text('Current scale factor: $_lastTextScaleFactor'); /// } /// } /// ``` /// {@end-tool} /// /// See also: /// /// * [MediaQuery.textScaleFactorOf], which provides a similar service with less /// boilerplate.®Y�[¯”¯”�/// Called when the platform brightness changes. /// /// This method exposes notifications from /// [dart:ui.PlatformDispatcher.onPlatformBrightnessChanged]. /// /// See also: /// /// * [MediaQuery.platformBrightnessOf], which provides a similar service with /// less boilerplate.¯º�6°Æ°Æ€ô/// Called when the system tells the app that the user's locale has /// changed. For example, if the user changes the system language /// settings. /// /// This method exposes notifications from /// [dart:ui.PlatformDispatcher.onLocaleChanged].°×°æ°å°ö‚²Ö²Ö�¶/// Called when the system puts the app in the background or returns /// the app to the foreground. /// /// An example of implementing this method is provided in the class-level /// documentation for the [WidgetsBindingObserver] class. /// /// This method exposes notifications from [SystemChannels.lifecycle]. /// /// See also: /// /// * [AppLifecycleListener], an alternative API for responding to /// application lifecycle changes.²ñ³³³‚µµ�Í/// Called whenever the [PlatformDispatcher] receives a notification that the /// focus state on a view has changed. /// /// The [event] contains the view ID for the view that changed its focus /// state. /// /// The view ID of the [FlutterView] in which a particular [BuildContext] /// resides can be retrieved with `View.of(context).viewId`, so that it may be /// compared with the view ID in the `event` to see if the event pertains to /// the given context.µµ&µ%µ4‚%··�©/// Called when a request is received from the system to exit the application. /// /// If any observer responds with [AppExitResponse.cancel], it will cancel the /// exit. All observers will be asked before exiting. /// /// {@macro flutter.services.binding.ServicesBinding.requestAppExit} /// /// See also: /// /// * [ServicesBinding.exitApplication] for a function to call that will request /// that the application exits.·_€À¸¸€”/// Called when the system is running low on memory. /// /// This method exposes the `memoryPressure` notification from /// [SystemChannels.system].¸%�¹¹€Ê/// Called when the system changes the set of currently active accessibility /// features. /// /// This method exposes notifications from /// [dart:ui.PlatformDispatcher.onAccessibilityFeaturesChanged].Àøï†šÀú&Àú&�)/// A widget for the root of the widget tree. /// /// Exposes an [attach] method to attach the widget tree to a [BuildOwner]. That /// method also bootstraps the element tree. /// /// Used by [WidgetsBinding.attachRootWidget] (which is indirectly called by /// [runApp]) to bootstrap applications.ÀúEeÀújÀújÀút/// Creates a [RootWidget].Àúv Àú}Àú|Àú� Àú‡Àú†Àú�Àú“Àú’Àú°}Àû(Àû(`/// The widget below this widget in the tree. /// /// {@macro flutter.widgets.ProxyWidget.child}Àû4eÀû„Àû„>/// A short description of this widget used by debugging aids.Àû >Àû¹Àû¹Àû Àû¡ÀûäƒFÀýgÀýg�a/// Inflate this widget and attaches it to the provided [BuildOwner]. /// /// If `element` is null, this function will create a new element. Otherwise, /// the given element will have an update scheduled to switch to this widget. /// /// Used by [WidgetsBinding.attachToBuildOwner] (which is indirectly called by /// [runApp]) to bootstrap applications.ÀýnÀýzÀýyÀý�Àý�ÀýŽÀÿ0VÀÿDÀÿDÀÿ0Àÿ1Àÿ�ŠAÀ|À|�Þ/// The root of the element tree. /// /// This element class is the instantiation of a [RootWidget]. It can be used /// only as the root of an [Element] tree (it cannot be mounted into another /// [Element]; its parent must be null). /// /// In typical usage, it will be instantiated for a [RootWidget] by calling /// [RootWidget.attach]. In this usage, it is normally instantiated by the /// bootstrapping logic in the [WidgetsFlutterBinding] singleton created by /// [runApp].À³cÀñÀñÀü:/// Creates a [RootElement] for the provided [RootWidget].ÀýÀÀÀÀ%À%À+À7À7ÀÅ/ÀÛÀÛÀÅÀÆÀ2yÀDÀDÀRÀbÀaÀ2À3À±€„ÀÃÀÃÀÏ ÀØÀ×À±À²À;€úÀMÀMÀSÀ]À\ÀdÀmÀlÀ;À<À;€†ÀMÀMÀTÀ`À_À;À<ÀH�TÀZÀZÀHÀIÀ¢‚À§À§À &€¥À ”À ”À ´ À ½À ¼À &À 'À Ò†×À ÝÀ Ý‚õ/// A concrete binding for applications based on the Widgets framework. /// /// This is the glue that binds the framework to the Flutter engine. /// /// When using the widgets framework, this binding, or one that /// implements the same interfaces, must be used. The following /// mixins are used to implement this binding: /// /// * [GestureBinding], which implements the basics of hit testing. /// * [SchedulerBinding], which introduces the concepts of frames. /// * [ServicesBinding], which provides access to the plugin subsystem. /// * [PaintingBinding], which enables decoding images. /// * [SemanticsBinding], which supports accessibility. /// * [RendererBinding], which handles the render tree. /// * [WidgetsBinding], which handles the widget tree.À Ë‚ÛÀÀ‚ /// Returns an instance of the binding that implements /// [WidgetsBinding]. If no binding has yet been initialized, the /// [WidgetsFlutterBinding] class is used to create and initialize /// one. /// /// You only need to call this method if you need the binding to be /// initialized before calling [runApp]. /// /// In the `flutter_test` framework, [testWidgets] initializes the /// binding instance to a [TestWidgetsFlutterBinding], not a /// [WidgetsFlutterBinding]. See /// [TestWidgetsFlutterBinding.ensureInitialized].ÀÝR�ÛÀê…Àê…Œ�/// Inflate the given widget and attach it to the view. /// /// The [runApp] method renders the provided `app` widget into the /// [PlatformDispatcher.implicitView] by wrapping it in a [View] widget, which /// will bootstrap the render tree for the app. Apps that want to control which /// [FlutterView] they render into can use [runWidget] instead. /// /// The widget is given constraints during layout that force it to fill the /// entire view. If you wish to align your widget to one side of the view /// (e.g., the top), consider using the [Align] widget. If you wish to center /// your widget, you can also use the [Center] widget. /// /// Calling [runApp] again will detach the previous root widget from the view /// and attach the given widget in its place. The new widget tree is compared /// against the previous widget tree and any differences are applied to the /// underlying render tree, similar to what happens when a [StatefulWidget] /// rebuilds after calling [State.setState]. /// /// Initializes the binding using [WidgetsFlutterBinding] if necessary. /// /// {@template flutter.widgets.runApp.shutdown} /// ## Application shutdown /// /// This widget tree is not torn down when the application shuts down, because /// there is no way to predict when that will happen. For example, a user could /// physically remove power from their device, or the application could crash /// unexpectedly, or the malware on the device could forcibly terminate the /// process. /// /// Applications are responsible for ensuring that they are well-behaved /// even in the face of a rapid unscheduled termination. /// /// To listen for platform shutdown messages (and other lifecycle changes), /// consider the [AppLifecycleListener] API. /// {@endtemplate} /// /// To artificially cause the entire widget tree to be disposed, consider /// calling [runApp] with a widget such as [SizedBox.shrink]. /// /// {@template flutter.widgets.runApp.dismissal} /// ## Dismissing Flutter UI via platform native methods /// /// An application may have both Flutter and non-Flutter UI in it. If the /// application calls non-Flutter methods to remove Flutter based UI such as /// platform native API to manipulate the platform native navigation stack, /// the framework does not know if the developer intends to eagerly free /// resources or not. The widget tree remains mounted and ready to render /// as soon as it is displayed again. /// {@endtemplate} /// /// To release resources more eagerly, establish a [platform channel](https://flutter.dev/to/platform-channels) /// and use it to call [runApp] with a widget such as [SizedBox.shrink] when /// the framework should dispose of the active widget tree. /// /// See also: /// /// * [runWidget], which bootstraps a widget tree without assuming the /// [FlutterView] into which it will be rendered. /// * [WidgetsBinding.attachRootWidget], which creates the root widget for the /// widget hierarchy. /// * [RenderObjectToWidgetAdapter.attachToRenderTree], which creates the root /// element for the element hierarchy. /// * [WidgetsBinding.handleBeginFrame], which pumps the widget pipeline to /// ensure the widget, element, and render trees are all built.ÀêŒ Àê”Àê“Àë1ŠPÀôðÀôð‰#/// Inflate the given widget and bootstrap the widget tree. /// /// Unlike [runApp], this method does not define a [FlutterView] into which the /// provided `app` widget is rendered into. It is up to the caller to include at /// least one [View] widget in the provided `app` widget that will bootstrap a /// render tree and define the [FlutterView] into which content is rendered. /// [RenderObjectWidget]s without an ancestor [View] widget will result in an /// exception. Apps that want to render into the default view without dealing /// with view management should consider calling [runApp] instead. /// /// {@tool snippet} /// The sample shows how to utilize [runWidget] to specify the [FlutterView] /// into which the `MyApp` widget will be drawn: /// /// ```dart /// runWidget( /// View( /// view: myFlutterView, /// child: const MyApp(), /// ), /// ); /// ``` /// {@end-tool} /// /// Calling [runWidget] again will detach the previous root widget and attach /// the given widget in its place. The new widget tree is compared against the /// previous widget tree and any differences are applied to the underlying /// render tree, similar to what happens when a [StatefulWidget] rebuilds after /// calling [State.setState]. /// /// Initializes the binding using [WidgetsFlutterBinding] if necessary. /// /// {@macro flutter.widgets.runApp.shutdown} /// /// To artificially cause the entire widget tree to be disposed, consider /// calling [runWidget] with a [ViewCollection] that does not specify any /// [ViewCollection.views]. /// /// {@macro flutter.widgets.runApp.dismissal} /// /// To release resources more eagerly, establish a [platform channel](https://flutter.dev/to/platform-channels) /// and use it to remove the [View] whose widget resources should be released /// from the `app` widget tree provided to [runWidget]. /// /// See also: /// /// * [runApp], which bootstraps a widget tree and renders it into a default /// [FlutterView]. /// * [WidgetsBinding.attachRootWidget], which creates the root widget for the /// widget hierarchy. /// * [RenderObjectToWidgetAdapter.attachToRenderTree], which creates the root /// element for the element hierarchy. /// * [WidgetsBinding.handleBeginFrame], which pumps the widget pipeline to /// ensure the widget, element, and render trees are all built.Àôú ÀõÀõÀõ…€ÒÀõŠÀõŠÀõ• Àõ�ÀõœÀõ¡Àõ±Àõ°Àõ¹ÀõÁÀõÀÀö[‚ ÀöbÀöbÀølÀø²Àø²?/// Print a string representation of the currently running app.¹.À¤ ÀB£ÀB£ˆõ/// The glue between the widgets layer and the Flutter engine. /// /// The [WidgetsBinding] manages a single [Element] tree rooted at [rootElement]. /// Calling [runApp] (which indirectly calls [attachRootWidget]) bootstraps that /// element tree. /// /// ## Relationship to render trees /// /// Multiple render trees may be associated with the element tree. Those are /// managed by the underlying [RendererBinding]. /// /// The element tree is segmented into two types of zones: rendering zones and /// non-rendering zones. /// /// A rendering zone is a part of the element tree that is backed by a render /// tree and it describes the pixels that are drawn on screen. For elements in /// this zone, [Element.renderObject] never returns null because the elements /// are all associated with [RenderObject]s. Almost all widgets can be placed in /// a rendering zone; notable exceptions are the [View] widget, [ViewCollection] /// widget, and [RootWidget]. /// /// A non-rendering zone is a part of the element tree that is not backed by a /// render tree. For elements in this zone, [Element.renderObject] returns null /// because the elements are not associated with any [RenderObject]s. Only /// widgets that do not produce a [RenderObject] can be used in this zone /// because there is no render tree to attach the render object to. In other /// words, [RenderObjectWidget]s cannot be used in this zone. Typically, one /// would find [InheritedWidget]s, [View]s, and [ViewCollection]s in this zone /// to inject data across rendering zones into the tree and to organize the /// rendering zones (and by extension their associated render trees) into a /// unified element tree. /// /// The root of the element tree at [rootElement] starts a non-rendering zone. /// Within a non-rendering zone, the [View] widget is used to start a rendering /// zone by bootstrapping a render tree. Within a rendering zone, the /// [ViewAnchor] can be used to start a new non-rendering zone. /// /// /// To figure out if an element is in a rendering zone it may walk up the tree /// calling [Element.debugExpectsRenderObjectForSlot] on its ancestors. If it /// reaches an element that returns false, it is in a non-rendering zone. If it /// reaches a [RenderObjectElement] ancestor it is in a rendering zone. ÀHF ÀH]ÀH]ÀLCDÀLXÀLXÀN_MÀNtÀNtÀp�Àp™Àp™ÀqÜ�3ÀrûÀrû€õ/// A delegate that communicates with a platform plugin for serializing and /// managing platform-rendered menu bars created by [PlatformMenuBar]. /// /// This is set by default to a [DefaultPlatformMenuDelegate] instance in /// [initInstances].ÀsJÀs9Às9Às^Às_ÀsFÀs]ÀsGÀŽ`,ÀŽxÀŽxÀ¡F#À¡KÀ¡KÀ¡eÀ¡p>À¡†À¡†À¡�À¡¦À¡«À¡§À¡¬À¡­À­*�%À®-À®-€Ý/// Whether we are currently in a frame. This is used to verify /// that frames are not scheduled redundantly. /// /// This is public so that test frameworks can change it. /// /// This flag is not used in release builds.À®À®À®JÀÅ&ÀÅ/ÀÅ/ÀÆS"ÀÆXÀÆXÀÆp ÀFÓ�oÀHÀH�/// The current [WidgetsBinding], if one has been created. /// /// Provides access to the features exposed by this mixin. The binding must /// be initialized before using this getter; this is typically done by calling /// [runApp] or [WidgetsFlutterBinding.ensureInitialized].ÀHm‚€ÀJŠÀJŠ�õ/// If true, forces the widget inspector to be visible. /// /// Overrides the `debugShowWidgetInspector` value set in [WidgetsApp]. /// /// Used by the `debugShowWidgetInspector` debugging extension. /// /// The inspector allows the selection of a location on your device or emulator /// and view what widgets and render objects associated with it. An outline of /// the selected widget and some summary information is shown on device and /// more detailed information is shown in the IDE or DevTools.ÀKm€ÒÀK½ÀK½4/// Notifier for [debugShowWidgetInspectorOverride].ÀLŽ�ÍÀMÐÀMÐ�/// The notifier for whether or not taps on the device are treated as widget /// selections when the widget inspector is enabled. /// /// - If true, taps in the app are intercepted by the widget inspector. /// - If false, taps in the app are not intercepted by the widget inspector.Ào,€ŸÀo±Ào±n/// The [BuildOwner] in charge of executing the build pipeline for the /// widget tree rooted at this binding.Àp«�+Àq¬Àq¬€Ý/// The object in charge of the focus tree. /// /// Rarely used directly. Instead, consider using [FocusScope.of] to obtain /// the [FocusScopeNode] for a given [BuildContext]. /// /// See [FocusManager] for more details.À¡µ�ýÀ£yÀ£y�œ/// Whether the Flutter engine has rasterized the first frame. /// /// Usually, the time that a frame is rasterized is very close to the time that /// it gets presented on the display. Specifically, rasterization is the last /// expensive phase of a frame that's still in Flutter's control. /// /// See also: /// /// * [waitUntilFirstFrameRasterized], the future when [firstFrameRasterized] /// becomes true.À£¸‚À¥‚À¥‚�š/// A future that completes when the Flutter engine has rasterized the first /// frame. /// /// Usually, the time that a frame is rasterized is very close to the time that /// it gets presented on the display. Specifically, rasterization is the last /// expensive phase of a frame that's still in Flutter's control. /// /// See also: /// /// * [firstFrameRasterized], whether this future has completed or not.À¥Å�cÀ¦ðÀ¦ð� /// Whether the first frame has finished building. /// /// This value can also be obtained over the VM service protocol as /// `ext.flutter.didSendFirstFrameEvent`. /// /// See also: /// /// * [firstFrameRasterized], whether the first frame has finished rendering.ÀÄl€¶ÀÅÀÅ€ƒ/// The [Element] that is at the root of the element tree hierarchy. /// /// This is initialized the first time [runApp] is called.ÀÅB� ÀÆ,ÀÆ,b/// Deprecated. Will be removed in a future version of Flutter. /// /// Use [rootElement] instead.ÀÅ®ÀůÀŹÀÆÀÅÀÀÅáÀÆ|TÀÆ’ÀÆ’ÀÆ|ÀÆ}ÀÓ'�ÀÔÀÔ€Å/// Whether the [rootElement] has been initialized. /// /// This will be false until [runApp] is called (or [WidgetTester.pumpWidget] /// is called in the context of a [TestWidgetsFlutterBinding]).ÀJótÀJ÷ÀJ÷ÀK ÀKÀK#ÀCWƒvÀCiÀCiÀCWÀCXÀN³�ÛÀNÛÀNÛÀN³ÀN´ÀNÉÀNÊÀP”�‹ÀP™ÀP™Àa%�HÀa7Àa7Àa%Àa&Àns€³Àn€Àn€ÀsgƒçÀwÀwƒe/// Registers the given object as a binding observer. Binding /// observers are notified when various application events occur, /// for example when the system locale changes. Generally, one /// widget in the widget tree registers itself as a binding /// observer, and converts the system state into inherited widgets. /// /// For example, the [WidgetsApp] widget registers as a binding /// observer and passes the screen size to a [MediaQuery] widget /// each time it is built, which enables other widgets to use the /// [MediaQuery.sizeOf] static method and (implicitly) the /// [InheritedWidget] mechanism to be notified whenever the screen /// size changes (e.g. whenever the screen rotates). /// /// See also: /// /// * [removeObserver], to release the resources reserved by this method. /// * [WidgetsBindingObserver], which has an example of using this method.ÀwÀw)Àw(ÀwT‚Àx¶Àx¶�D/// Unregisters the given observer. This should be used sparingly as /// it is relatively expensive (O(N) in the number of registered /// observers). /// /// See also: /// /// * [addObserver], for the method that adds observers in the first place. /// * [WidgetsBindingObserver], which has an example of using this method.ÀxÅÀxÝÀxÜÀys‚aÀy˜Ày˜ÀysÀytÀ{Ú€ßÀ{ìÀ{ìÀ{ÚÀ{ÛÀ|¿€÷À|ÑÀ|ÑÀ|¿À|ÀÀ}¼�À}ÎÀ}ÎÀ}¼À}½À~Â� À~ÔÀ~ÔÀ~ÂÀ~ÃÀÑ�LÀ€ÈÀ€È€¬/// Called when the system locale changes. /// /// Calls [dispatchLocalesChanged] to notify the binding observers. /// /// See [dart:ui.PlatformDispatcher.onLocaleChanged].À€�À€ŽÀ€›À€œÀ€­À€®À�#‚À‚nÀ‚n�/// Notify all the observers that the locale has changed (using /// [WidgetsBindingObserver.didChangeLocales]), giving them the /// `locales` argument. /// /// This is called by [handleLocaleChanged] when the /// [PlatformDispatcher.onLocaleChanged] notification is received.À‚…À‚”À‚“À‚IÀ‚JÀ‚WÀ‚XÀƒ<‚_À„ÓÀ„Ó�_/// Notify all the observers that the active set of [AccessibilityFeatures] /// has changed (using [WidgetsBindingObserver.didChangeAccessibilityFeatures]), /// giving them the `features` argument. /// /// This is called by [handleAccessibilityFeaturesChanged] when the /// [PlatformDispatcher.onAccessibilityFeaturesChanged] notification is received.À„®À„¯À„¼À„½À…¡ˆhÀ� À� †Î/// Called when the system pops the current route. /// /// This first notifies the binding observers (using /// [WidgetsBindingObserver.didPopRoute]), in registration order, until one /// returns true, meaning that it was able to handle the request (e.g. by /// closing a dialog box). If none return true, then the application is shut /// down by calling [SystemNavigator.pop]. /// /// [WidgetsApp] uses this in conjunction with a [Navigator] to /// cause the back button to close dialog boxes, return from modal /// pages, and so forth. /// /// This method exposes the `popRoute` notification from /// [SystemChannels.navigation]. /// /// {@template flutter.widgets.AndroidPredictiveBack} /// ## Handling backs ahead of time /// /// Not all system backs will result in a call to this method. Some are /// handled entirely by the system without informing the Flutter framework. /// /// Android API 33+ introduced a feature called predictive back, which allows /// the user to peek behind the current app or route during a back gesture and /// then decide to cancel or commit the back. Flutter enables or disables this /// feature ahead of time, before a back gesture occurs, and back gestures /// that trigger predictive back are handled entirely by the system and do not /// trigger this method here in the framework. /// /// By default, the framework communicates when it would like to handle system /// back gestures using [SystemNavigator.setFrameworkHandlesBack] in /// [WidgetsApp]. This is done automatically based on the status of the /// [Navigator] stack and the state of any [PopScope] widgets present. /// Developers can manually set this by calling the method directly or by /// using [NavigationNotification]. /// {@endtemplate}ÀŒÙÀŒÚÀŒçÀŒèÀŽ“�çÀŽ ÀŽ ÀޏÀŽÏÀŽÎÀ�€�6À��À��À�®À�ÅÀ�ÄÀ‘¼‚;À‘ÉÀ‘ÉÀ“ý€«À” À” À”®ƒ‡À–ÑÀ–Ñ�Á/// Called when the host tells the app to push a new route onto the /// navigator. /// /// This notifies the binding observers (using /// [WidgetsBindingObserver.didPushRoute]), in registration order, until one /// returns true, meaning that it was able to handle the request (e.g. by /// opening a dialog box). If none return true, then nothing happens. /// /// This method exposes the `pushRoute` notification from /// [SystemChannels.navigation].À–á À–éÀ–èÀ–ŽÀ–�À–œÀ–�À–®À–¯À˜;�õÀ˜HÀ˜HÀ˜d$À˜{À˜zÀš6�¹ÀšCÀšCÀš_ÀškÀšjÀ›õ‚4ÀœÀœÀœ"Àœ.Àœ-Àž/�ÀžAÀžAÀž`ÀžsÀžrÀž/Àž0ÀŸS�ÀŸeÀŸeÀŸ|ÀŸŒÀŸ‹ÀŸSÀŸTÀ \€äÀ nÀ nÀ \À ]À§.…öÀ§3À§3À®V–À»8À»8‹Æ/// Pump the build and rendering pipeline to generate a frame. /// /// This method is called by [handleDrawFrame], which itself is called /// automatically by the engine when it is time to lay out and paint a /// frame. /// /// Each frame consists of the following phases: /// /// 1. The animation phase: The [handleBeginFrame] method, which is registered /// with [PlatformDispatcher.onBeginFrame], invokes all the transient frame /// callbacks registered with [scheduleFrameCallback], in registration order. /// This includes all the [Ticker] instances that are driving /// [AnimationController] objects, which means all of the active [Animation] /// objects tick at this point. /// /// 2. Microtasks: After [handleBeginFrame] returns, any microtasks that got /// scheduled by transient frame callbacks get to run. This typically includes /// callbacks for futures from [Ticker]s and [AnimationController]s that /// completed this frame. /// /// After [handleBeginFrame], [handleDrawFrame], which is registered with /// [PlatformDispatcher.onDrawFrame], is called, which invokes all the /// persistent frame callbacks, of which the most notable is this method, /// [drawFrame], which proceeds as follows: /// /// 3. The build phase: All the dirty [Element]s in the widget tree are /// rebuilt (see [State.build]). See [State.setState] for further details on /// marking a widget dirty for building. See [BuildOwner] for more information /// on this step. /// /// 4. The layout phase: All the dirty [RenderObject]s in the system are laid /// out (see [RenderObject.performLayout]). See [RenderObject.markNeedsLayout] /// for further details on marking an object dirty for layout. /// /// 5. The compositing bits phase: The compositing bits on any dirty /// [RenderObject] objects are updated. See /// [RenderObject.markNeedsCompositingBitsUpdate]. /// /// 6. The paint phase: All the dirty [RenderObject]s in the system are /// repainted (see [RenderObject.paint]). This generates the [Layer] tree. See /// [RenderObject.markNeedsPaint] for further details on marking an object /// dirty for paint. /// /// 7. The compositing phase: The layer tree is turned into a [Scene] and /// sent to the GPU. /// /// 8. The semantics phase: All the dirty [RenderObject]s in the system have /// their semantics updated (see [RenderObject.assembleSemanticsNode]). This /// generates the [SemanticsNode] tree. See /// [RenderObject.markNeedsSemanticsUpdate] for further details on marking an /// object dirty for semantics. /// /// For more details on steps 4-8, see [PipelineOwner]. /// /// 9. The finalization phase in the widgets layer: The widgets tree is /// finalized. This causes [State.dispose] to be invoked on any objects that /// were removed from the widgets tree this frame. See /// [BuildOwner.finalizeTree] for more details. /// /// 10. The finalization phase in the scheduler layer: After [drawFrame] /// returns, [handleDrawFrame] then invokes post-frame callbacks (registered /// with [addPostFrameCallback]).À»&À»'ÀÆÖ† ÀÈ®ÀÈ®�µ/// Used by [runApp] to wrap the provided `rootWidget` in the default [View]. /// /// The [View] determines into what [FlutterView] the app is rendered into. /// This is currently [PlatformDispatcher.implicitView] from [platformDispatcher]. /// This method will throw a [StateError] if the [PlatformDispatcher.implicitView] /// is null. /// /// The `rootWidget` widget provided to this method must not already be /// wrapped in a [View].ÀÈÂÀÈÊÀÈÉÀÌé�eÀÍÚÀÍÚ€Ñ/// Schedules a [Timer] for attaching the root widget. /// /// This is called by [runApp] to configure the widget tree. Consider using /// [attachRootWidget] if you want to build the widget tree synchronously.ÀÍóÀÍûÀÍúÀÍÇÀÍÈÀÎT�ÍÀÏžÀÏž�)/// Takes a widget and attaches it to the [rootElement], creating it if /// necessary. /// /// This is called by [runApp] to configure the widget tree. /// /// See also: /// /// * [RenderObjectToWidgetAdapter.attachToRenderTree], which inflates a /// widget and attaches it to the render tree.ÀϯÀÏ·À϶ÀÐ'‚úÀÑòÀÑò�ª/// Called by [attachRootWidget] to attach the provided [RootWidget] to the /// [buildOwner]. /// /// This creates the [rootElement], if necessary, or re-uses an existing one. /// /// This method is rarely called directly, but it can be useful in tests to /// restore the element tree to a previous version by providing the /// [RootWidget] of that version (see [WidgetTester.restartAndRestore] for an /// exemplary use case).ÀÒÀÒÀÒÀÔ5�ÀÔOÀÔOÀÔ5ÀÔ6ÀÕX‡óÀܸÀܸ†è/// Computes the locale the current platform would resolve to. /// /// This method is meant to be used as part of a /// [WidgetsApp.localeListResolutionCallback]. Since this method may return /// null, a Flutter/dart algorithm should still be provided as a fallback in /// case a native resolved locale cannot be determined or if the native /// resolved locale is undesirable. /// /// This method may return a null [Locale] if the platform does not support /// native locale resolution, or if the resolution failed. /// /// The first `supportedLocale` is treated as the default locale and will be returned /// if no better match is found. /// /// Android and iOS are currently supported. /// /// On Android, the algorithm described in /// https://developer.android.com/guide/topics/resources/multilingual-support /// is used to determine the resolved locale. Depending on the android version /// of the device, either the modern (>= API 24) or legacy (< API 24) algorithm /// will be used. /// /// On iOS, the result of `preferredLocalizationsFromArray` method of `NSBundle` /// is returned. See: /// https://developer.apple.com/documentation/foundation/nsbundle/1417249-preferredlocalizationsfromarray?language=objc /// for details on the used method. /// /// iOS treats script code as necessary for a match, so a user preferred locale of /// `zh_Hans_CN` will not resolve to a supported locale of `zh_CN`. /// /// Since implementation may vary by platform and has potential to be heavy, /// it is recommended to cache the results of this method if the value is /// used multiple times. /// /// Second-best (and n-best) matching locales should be obtained by calling this /// method again with the matched locale of the first call omitted from /// `supportedLocales`.ÀÜÖÀÜäÀÜã €²dart:ui€Ípackage:flutter/animation.dart€ÿpackage:flutter/material.dart�0&package:flutter_test/flutter_test.dart�o adapter.dart��app_lifecycle_listener.dart�¾ basic.dart�Üfocus_scope.dart‚media_query.dart‚$navigator.dart‚Fpop_scope.dart†ã=€ˆ€§€©€Ä€ö�'�a�f�†�µ�Ó�÷‚‚=‚_‚i‚k‚�‚¨‚º‚Ä‚ä‚þƒƒ0ƒAƒ^ƒxƒ‘ƒ“ƒ¾ƒç„„;„d„f„z„�„®„Ȅꅅ$…9…Z…\…Ž…�…©…͆X†Z†£†¨†÷‡.‡w‡Àˆˆ ˆ[ˆŸˆí‰-‰2‰„‰Ò‰þŠMŠtŠyŠŽŠÏ‹‹T‹Y‹ª‹ê‹ïŒFŒWŒ†ŒÔ� ��Z�“�š�ÜŽ$ŽgެŽÒŽÙ��9�@�v�²�´�í�ô�F�‘�ã‘3‘:‘‡‘Õ’’W’^’ª’é“8“H“O“—“·“ÿ””5”<”Ž”½”Ä• •,•v•x•Ê•ú––S–›–ê–ñ—9—Y—~—€—Í—í—ô˜F˜u˜|˜Ä˜ä™ ™ ™Z™l™s™µ™üš!š(šeš‰š™šÆ›››O›Q›‘›Ô›Ûœœdœ‰œ�œØœü��U�¨�÷žžSž~ž˜ž´žÂžöŸRŸ“ŸªŸ´Ÿ¼ŸÁŸÃ  ( / ] “ š ± ¸ ý¡M¡¡†¡•¡Ê¡ø¡ÿ¢¢Z¢c¢j¢È¢æ¢í£££:£p£{£‚£•£½£ç¤H¤w¤­¤¸¤¿¤Ò¤ì¥%¥A¥L¥S¥f¥‰¥Ñ¥Ü¥ã¥ö¦$¦X¦c¦l¦w¦Š¦‘¦Û§*§?§F§W§^§¨§¿§Ý§ß¨¨#¨k¨±¨Å¨Ì¨ú©8©?©V©]©l©©©ß©æ©ùªQªZªaªÏªâªþ««R«]«d«w«‘«Ê«æ«ñ«ø¬#¬*¬=¬h¬Ø¬ã¬ê¬ý­+­r­}­†­‘­¤­«­¼­Ã®®/®U®W®‹®’®À¯¯¯¯ ¯r¯�¯¶¯¸¯ÿ°D°U°\°Š°¿°ò°ô±<±^±e±²±ï±ö²@²G²X²_²¦²Ï³³³a³‹³’³Þ³ì³ó´@´’´â´üµ0µ2µ„µ‹µÝ¶¶¶e¶l¶}¶„¶Ø¶ý·4·V·[·]·•·œ·Þ·þ¸!¸#¸s¸„¸‹¸¹¸ý¹)¹,¹.¹n¹s¹Æºº+º0ºUºZº¨ºÚºß»/»I»N»�»í¼<¼Ž¼à¼ÿ½½T½¥½ñ¾<¾Š¾Ø¿(¿u¿Â¿Ý¿âÀ@2À@ƒÀ@ÊÀA ÀAÀA_ÀAdÀA´ÀBÀBTÀB�ÀB³ÀB»ÀBÑÀBëÀCÀCÀC9ÀCUÀCbÀC|ÀC˜ÀC¯ÀC±ÀCÂÀCâÀCöÀDÀDÀD@ÀD�ÀDËÀDìÀE'ÀEfÀE¸ÀF ÀFÀFpÀF„ÀF�ÀFÊÀFÏÀFÑÀGÀGÀGeÀG·ÀGõÀHDÀHiÀHkÀH¦ÀH­ÀHøÀHÿÀIBÀIIÀIœÀIîÀJ=ÀJÀJ®ÀJêÀJïÀJñÀK'ÀKdÀKiÀKkÀK£ÀKêÀLAÀLŠÀLŒÀLÜÀMÀMÀMfÀM¶ÀMþÀN]ÀN¯ÀN±ÀNÇÀNÔÀNóÀO\ÀO}ÀO¾ÀOûÀPEÀP‹ÀP�ÀP’ÀP´ÀPûÀQ9ÀQVÀQvÀQ~ÀQÃÀRÀRÀR<ÀRDÀR…ÀRÃÀRàÀRúÀSÀSSÀS‘ÀS·ÀSØÀSàÀT-ÀTkÀT‘ÀT¯ÀT·ÀTÿÀU=ÀUcÀU{ÀUƒÀUÏÀV ÀV2ÀVPÀVXÀV›ÀVÙÀW ÀW%ÀW-ÀWvÀW´ÀWÙÀWúÀXÀXÀXMÀXOÀXsÀXœÀXÅÀXëÀY ÀY+ÀYVÀYqÀY˜ÀYºÀYÆÀYïÀYùÀZÀZ*ÀZSÀZyÀZ˜ÀZÃÀZÞÀ[À['À[3À[\À[fÀ[nÀ[pÀ[“À[¼À[åÀ\ À\,À\KÀ\vÀ\™À\´À\ÛÀ]À]#À]/À]XÀ]bÀ]jÀ]“À]¼À]âÀ^À^,À^OÀ^jÀ^‘À^·À^ÙÀ^åÀ_À_À_ À_"À_TÀ_}À_¦À`À`1À`;À`CÀ`lÀ`•À`áÀa ÀaÀaÀa!Àa#Àa0ÀaRÀavÀaxÀa’Àa³ÀaîÀb*Àb`Àb’ÀbžÀb¨ÀbªÀbËÀc ÀcHÀc„Àc¶ÀcÂÀcÌÀcÎÀcäÀd ÀdRÀdªÀdÌÀeÀe?ÀeNÀeŽÀe³ÀeÁÀeÍÀeÖÀeØÀeùÀf>Àf]Àf‚ÀfÅÀgÀgPÀg”Àg¢Àg®Àg¸ÀgºÀgÛÀh*ÀhIÀhnÀh±ÀiÀi<Ài}Ài‹Ài—Ài¡Ài£ÀiîÀjÀjUÀj�Àj³ÀjáÀjíÀj÷ÀkÀkbÀk¥ÀkËÀlÀlÀlÀl!Àl#Àl4ÀlYÀl˜ÀlèÀmÀmGÀmqÀm~Àm¶ÀmÙÀmåÀmïÀmñÀnIÀnKÀn_ÀnjÀnoÀnqÀn“Àn³ÀnàÀnúÀoÀo#Ào(Ào*ÀotÀoŸÀoÍÀpÀpbÀp‹Àp§Àp©ÀpØÀpßÀq.ÀqfÀqmÀq™ÀqØÀqÚÀr)ÀrsÀrzÀrÇÀrßÀsÀsÀscÀseÀs¦ÀsëÀt-ÀtlÀt³ÀtºÀtýÀuAÀu†ÀuÄÀv ÀvBÀvIÀvZÀvaÀv¯ÀvþÀwPÀwRÀwšÀwÞÀwñÀwøÀx ÀxÀx`Àx¯ÀxéÀyÀy:ÀyAÀyjÀyoÀyqÀy~Ày¸ÀyÕÀz7Àz„ÀzŸÀzìÀ{4À{zÀ{ƒÀ{ŠÀ{ÑÀ{ÖÀ{ØÀ{åÀ|À|)À|‹À|¯À|¶À|»À|½À|ÊÀ|óÀ}À}€À}¬À}³À}¸À}ºÀ}ÇÀ}óÀ~!À~ƒÀ~²À~¹À~¾À~ÀÀ~ÍÀ~üÀ-À�ÀÁÀÈÀÍÀÏÀýÀ€À€KÀ€RÀ€‹À€™À€«À€ÁÀ€áÀ�À�À�!À�dÀ�§À�ÂÀ�ÉÀ‚À‚GÀ‚UÀ‚gÀ‚ŸÀƒÀƒ,Àƒ3Àƒ8Àƒ:Àƒ‰ÀƒÝÀ„ À„À„WÀ„¬À„ºÀ„ÌÀ„ýÀ…_À…‘À…˜À…�À…ŸÀ…ÕÀ…ÜÀ†À†cÀ†°À‡À‡.À‡5À‡xÀ‡¾À‡ÚÀ‡áÀˆÀˆAÀˆHÀˆ�Àˆ¨Àˆ¯ÀˆúÀ‰IÀ‰PÀ‰¡À‰óÀŠEÀŠ“ÀŠåÀ‹À‹À‹pÀ‹¸ÀŒÀŒMÀŒšÀŒÁÀŒ×ÀŒåÀŒûÀ�$À�†À�±À�ÇÀ�ÐÀ�×À�óÀŽÀŽ ÀŽ ÀŽ^ÀŽ�ÀŽ‘ÀŽÜÀŽþÀ�QÀ�³À�ìÀ�À�@À�IÀ�PÀ�wÀ�|À�~À�ØÀ‘À‘À‘À‘À‘lÀ‘³À‘¸À‘ºÀ‘íÀ’À’hÀ’¹À“ À“XÀ“‰À“¨À“·À“¾À“ôÀ“ùÀ“ûÀ”.À”WÀ”fÀ”mÀ”oÀ”¥À”ªÀ”¬À”óÀ•À• À•>À•ŽÀ•ÛÀ–$À–+À–hÀ–ŒÀ–šÀ–¬À–ÂÀ–øÀ—PÀ—²À—ùÀ˜À˜À˜À˜2À˜7À˜9À˜“À˜ÔÀ™À™CÀ™KÀ™­À™ôÀš ÀšÀšÀš-Àš2Àš4ÀšyÀš¢ÀšÉÀ›À›NÀ›†À›�À›½À›äÀ›ìÀ›ñÀ›óÀœ<ÀœjÀœ¿ÀœèÀ�*À�~À�¸À�òÀžÀž&Àž+Àž-Àž:Àž|Àž®ÀŸÀŸCÀŸJÀŸOÀŸQÀŸ^ÀŸ•ÀŸ¿À !À LÀ SÀ XÀ ZÀ gÀ ˆÀ «À¡ À¡6À¡=À¡BÀ¡DÀ¡lÀ¡nÀ¡±À¡³À¡õÀ¡üÀ¢OÀ¢ À¢åÀ¢ìÀ¢ýÀ£À£VÀ£nÀ£´À£¶À¤À¤À¤À¤nÀ¤¿À¥À¥ À¥À¥#À¥oÀ¥ÁÀ¥ÃÀ¥ùÀ¦À¦GÀ¦tÀ¦{À¦ŒÀ¦“À¦åÀ§*À§,À§NÀ§—À§¿À§ÐÀ§ùÀ¨2À¨lÀ¨‰À¨×À©À©+À©AÀ©ŽÀ©®À©ýÀªPÀª¥ÀªùÀ«OÀ«¥À«ëÀ¬=À¬|À¬ÃÀ¬ÑÀ¬ÞÀ¬çÀ¬ûÀ­À­!À­&À­(À­kÀ­�À­¤À­áÀ­èÀ®À®&À®RÀ®TÀ®–À®�À®çÀ¯1À¯?À¯FÀ¯zÀ¯�À¯ÓÀ°"À°sÀ°´À±À±'À±.À±~À±ÐÀ²À²9À²@À²�À²×À³$À³SÀ³ZÀ³¥À³õÀ´GÀ´\À´cÀ´´ÀµÀµHÀµOÀµ—ÀµÆÀµüÀ¶À¶NÀ¶ À¶îÀ·À· À·ZÀ·rÀ·yÀ·ÉÀ¸À¸HÀ¸™À¸¼À¸ÃÀ¸þÀ¹À¹PÀ¹ À¹ÚÀº ÀºÀº`Àº°ÀºÕÀºÛÀ»$À»1À»GÀ»qÀ»‚À»¬À»ÀÀ»ËÀ»ÍÀ»÷À¼$À¼HÀ¼zÀ¼|À¼¶À¼âÀ½À½RÀ½¢À½ñÀ¾)À¾`À¾¬À¾÷À¿À¿QÀ¿uÀ¿ŸÀ¿©À¿ôÀÀBÀÀƒÀÀÍÀÀÔÀÀÖÀÀáÀÁÀÁ2ÀÁ;ÀÁUÀÁhÀÁ¡ÀÁ·ÀÁÄÀÁçÀÁøÀ ÀÂ8ÀÂNÀÂ[ÀÂbÀÂ|À¸ÀÃÀÃÀÃÀÃ;ÀÃyÀÃÊÀÃèÀÄÀÄ\ÀÄcÀÄhÀÄjÀIJÀĹÀÄ÷ÀÅ$ÀÅ>ÀÅ@ÀŃÀÅŠÀŬÀżÀÅÝÀÆÀÆÀÆOÀÆQÀÆxÀÆzÀƇÀÆÒÀÆÔÀÇ%ÀÇ,ÀÇ{ÀÇÑÀÈ'ÀÈ7ÀÈ>ÀȉÀÈ¥ÀÈØÀÉ ÀÉ%ÀÉrÀÉÀÀÊ ÀÊ<ÀÊ�ÀÊÃÀË ÀË^ÀËyÀËÎÀËØÀËßÀËáÀËóÀÌ"ÀÌsÀ̾ÀÌØÀÌàÀÌåÀÌçÀÍ!ÀÍ(ÀÍwÀÍÅÀÍÓÀÎ ÀÎÀÎBÀÎKÀÎPÀÎRÀÎ�ÀίÀζÀÎöÀÎýÀÏÀÏÀÏbÀÏ—ÀÏÅÀÐÀÐ#ÀÐ%ÀÐtÀЉÀÐ�ÀÐáÀÐèÀÑ7ÀÑ~ÀÑÏÀÑëÀÒÀÒSÀÒvÀÒÃÀÒàÀÓÀÓÀÓ#ÀÓ%ÀÓ\ÀÓcÀÓ´ÀÓ÷ÀÔ1ÀÔ3ÀÔ@ÀÔfÀÔwÀÔ³ÀÔÇÀÔÒÀÔÔÀÔôÀÕ!ÀÕ(ÀÕOÀÕTÀÕVÀÕ˜ÀÕŸÀÕÓÀÖ"ÀÖrÀÖ½ÀÖäÀÖëÀ×:À×xÀ×ÀרÀ×üÀØÀØ3ÀØ:ÀØhÀعÀÙ ÀÙ^ÀÙsÀÙzÀÙÎÀÙçÀÚbÀÚ‰ÀÚ�ÀÚæÀÛ-ÀÛ4ÀÛ„ÀÛÑÀÛíÀÛôÀÜHÀÜ“ÀÜ®ÀÜøÀÝHÀÝMÀÝPÀÝRÀÝ‹ÀÝ�ÀÝðÀÞ4ÀÞ„ÀÞÕÀßÀßÀßhÀß³ÀàÀà:Àà?ÀàŽÀàÝÀá*ÀáwÀá¥ÀáªÀáóÀáøÀâ)ÀâFÀâKÀâ›ÀâìÀã;ÀãˆÀã–Àã›ÀãåÀäÀä$ÀäqÀäŸÀä³Àä¸ÀåÀåBÀåGÀåyÀå³Àå¸ÀæÀæQÀæžÀæèÀç3ÀçZÀçnÀçsÀçäÀè2ÀèoÀètÀèƒÀèˆÀèÑÀéÀéXÀérÀéÃÀéîÀê<Àê€Àê›ÀêèÀë,Àë/Àë1ÀënÀësÀëÓÀì$ÀìvÀìÆÀíÀícÀí²ÀíöÀíûÀîÀî^Àî�Àî•Àî¢Àî²Àî¿ÀîÝÀîüÀïÀïÀïÀï(Àï-Àï|ÀïÌÀðÀðiÀðˆÀð�ÀðÖÀðÛÀñ ÀñÀñYÀñ¤ÀñÁÀñÆÀñõÀñúÀòkÀòºÀòóÀòøÀóÀó Àó[ÀórÀóÃÀóÝÀô.ÀôYÀô§ÀôëÀõ ÀõVÀõ€ÀõƒÀõ…ÀõÔÀöÀöÀö8ÀöVÀöYÀö[Àö{Àö’Àö¤Àö¾ÀöØÀöôÀ÷À÷@À÷…À÷»ÀøÀøÀøEÀøJÀøgÀøjÀølÀø­ÀøÄÀøêÀøíÀøïÀùÀù#ÀùuÀù£Àù¨ÀùöÀú ÀúCÀúbÀú¬Àú®ÀúßÀúæÀûÀû0Àû2ÀûtÀûœÀûžÀû«ÀûàÀûâÀü+Àü2ÀüƒÀüÔÀüÛÀý-ÀýYÀý›Àý·ÀýÓÀý÷ÀþÀþ?ÀþJÀþqÀþ®Àþ¹ÀþÇÀþéÀÿ ÀÿÀÿ'Àÿ,Àÿ.Àÿ;ÀÿˆÀÿ‹Àÿ�Àÿ°ÀÿµÀÀRÀ|À�ÀÎÀÀgÀvÀ±ÀïÀÀÀ.À0À=ÀmÀˆÀ¡À¨À­À¯À¼ÀáÀÿÀÀ2À7À9ÀFÀxÀ©ÀÌÀÝÀúÀ2À7À9ÀFÀmÀ‹À­À¾ÀÃÀÅÀÿÀ)ÀDÀFÀSÀnÀ�ÀÐÀïÀ À:ÀTÀ[ÀxÀ™ÀžÀ ÀµÀÀÀÀ6ÀvÀ•À¬ÀÑÀÀÀIÀŸÀµÀ¼ÀÁÀÃÀÐÀ "À $À 1À �À ÍÀ ÐÀ ÒÀ À À fÀ kÀ ¬À íÀ À "À gÀ «À ôÀ -À fÀ ŸÀ ×À À À +À FÀ `À zÀ •À ¯À ÉÀÀHÀŽÀšÀ¡ÀèÀÀÀaÀ¡ÀÅÀûÀ*ÀWÀwÀ~À£À¨À« WidgetsBindingObserverWidgetsBindingrunApp runWidget _runWidget_debugDumpAppString debugDumpApp RootWidget RootElementWidgetsFlutterBinding%flutter.widgets.AndroidPredictiveBackƒÄ## Handling backs ahead of time Not all system backs will result in a call to this method. Some are handled entirely by the system without informing the Flutter framework. Android API 33+ introduced a feature called predictive back, which allows the user to peek behind the current app or route during a back gesture and then decide to cancel or commit the back. Flutter enables or disables this feature ahead of time, before a back gesture occurs, and back gestures that trigger predictive back are handled entirely by the system and do not trigger this method here in the framework. By default, the framework communicates when it would like to handle system back gestures using [SystemNavigator.setFrameworkHandlesBack] in [WidgetsApp]. This is done automatically based on the status of the [Navigator] stack and the state of any [PopScope] widgets present. Developers can manually set this by calling the method directly or by using [NavigationNotification].flutter.widgets.runApp.shutdown‚7## Application shutdown This widget tree is not torn down when the application shuts down, because there is no way to predict when that will happen. For example, a user could physically remove power from their device, or the application could crash unexpectedly, or the malware on the device could forcibly terminate the process. Applications are responsible for ensuring that they are well-behaved even in the face of a rapid unscheduled termination. To listen for platform shutdown messages (and other lifecycle changes), consider the [AppLifecycleListener] API. flutter.widgets.runApp.dismissal�¹## Dismissing Flutter UI via platform native methods An application may have both Flutter and non-Flutter UI in it. If the application calls non-Flutter methods to remove Flutter based UI such as platform native API to manipulate the platform native navigation stack, the framework does not know if the developer intends to eagerly free resources or not. The widget tree remains mounted and ready to render as soon as it is displayed again.ËV