[{"data":1,"prerenderedAt":3613},["ShallowReactive",2],{"navigation_docs":3,"-examples-flutter-app":265,"-examples-flutter-app-surround":3608},[4,35,49,89,117,164,193,235,253,257,261],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"/getting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","/getting-started/introduction","1.getting-started/2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/getting-started/installation","1.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","/getting-started/quick-start","1.getting-started/4.quick-start","i-lucide-rocket",{"title":26,"path":27,"stem":28,"icon":29},"Configuration","/getting-started/configuration","1.getting-started/5.configuration","i-lucide-sliders-horizontal",{"title":31,"path":32,"stem":33,"icon":34},"First Auth","/getting-started/first-auth","1.getting-started/6.first-auth","i-lucide-key-round",{"title":36,"path":37,"stem":38,"children":39,"page":6},"Migration","/migration","10.migration",[40,45],{"title":41,"path":42,"stem":43,"icon":44},"Migration depuis Firebase Auth","/migration/from-firebase","10.migration/1.from-firebase","i-lucide-arrow-right-left",{"title":46,"path":47,"stem":48,"icon":44},"Migration depuis Supabase Auth","/migration/from-supabase","10.migration/2.from-supabase",{"title":50,"path":51,"stem":52,"children":53,"page":6},"Core Concepts","/core-concepts","2.core-concepts",[54,59,64,69,74,79,84],{"title":55,"path":56,"stem":57,"icon":58},"Architecture","/core-concepts/architecture","2.core-concepts/1.architecture","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Providers","/core-concepts/providers","2.core-concepts/2.providers","i-lucide-plug",{"title":65,"path":66,"stem":67,"icon":68},"Sessions","/core-concepts/sessions","2.core-concepts/3.sessions","i-lucide-timer",{"title":70,"path":71,"stem":72,"icon":73},"Storage","/core-concepts/storage","2.core-concepts/4.storage","i-lucide-database",{"title":75,"path":76,"stem":77,"icon":78},"Reactivity","/core-concepts/reactivity","2.core-concepts/5.reactivity","i-lucide-activity",{"title":80,"path":81,"stem":82,"icon":83},"Callbacks","/core-concepts/callbacks","2.core-concepts/6.callbacks","i-lucide-shield-check",{"title":85,"path":86,"stem":87,"icon":88},"Events","/core-concepts/events","2.core-concepts/7.events","i-lucide-radio",{"title":60,"path":90,"stem":91,"children":92,"page":6},"/providers","3.providers",[93,97,101,105,109,113],{"title":94,"path":95,"stem":96},"Credentials Provider","/providers/credentials","3.providers/1.credentials",{"title":98,"path":99,"stem":100},"OAuth2 Provider","/providers/oauth2","3.providers/2.oauth2",{"title":102,"path":103,"stem":104},"Google Provider","/providers/google","3.providers/3.google",{"title":106,"path":107,"stem":108},"GitHub Provider","/providers/github","3.providers/4.github",{"title":110,"path":111,"stem":112},"Apple Provider","/providers/apple","3.providers/5.apple",{"title":114,"path":115,"stem":116},"Proxy OAuth Provider","/providers/proxy-oauth","3.providers/6.proxy-oauth",{"title":118,"path":119,"stem":120,"children":121,"page":6},"Guides","/guides","4.guides",[122,126,131,136,141,146,151,155,159],{"title":123,"path":124,"stem":125},"Email / Password Auth","/guides/email-auth","4.guides/1.email-auth",{"title":127,"path":128,"stem":129,"icon":130},"Custom OAuth2 Flow","/guides/oauth2-flow","4.guides/2.oauth2-flow","i-lucide-workflow",{"title":132,"path":133,"stem":134,"icon":135},"Deep Links & OAuth2 Callbacks","/guides/deep-links","4.guides/3.deep-links","i-lucide-link",{"title":137,"path":138,"stem":139,"icon":140},"Token Refresh","/guides/token-refresh","4.guides/4.token-refresh","i-lucide-refresh-cw",{"title":142,"path":143,"stem":144,"icon":145},"Multi-Account","/guides/multi-account","4.guides/5.multi-account","i-lucide-users",{"title":147,"path":148,"stem":149,"icon":150},"Route Protection","/guides/route-protection","4.guides/6.route-protection","i-lucide-lock",{"title":152,"path":153,"stem":154,"icon":63},"Custom Provider","/guides/custom-provider","4.guides/7.custom-provider",{"title":156,"path":157,"stem":158,"icon":73},"Custom Storage","/guides/custom-storage","4.guides/8.custom-storage",{"title":160,"path":161,"stem":162,"icon":163},"Testing","/guides/testing","4.guides/9.testing","i-lucide-flask-conical",{"title":165,"path":166,"stem":167,"children":168,"page":6},"Flutter","/flutter","5.flutter",[169,173,178,183,188],{"title":170,"path":171,"stem":172},"Flutter Setup","/flutter/setup","5.flutter/1.setup",{"title":174,"path":175,"stem":176,"icon":177},"Secure Storage","/flutter/secure-storage","5.flutter/2.secure-storage","i-lucide-vault",{"title":179,"path":180,"stem":181,"icon":182},"Widgets","/flutter/widgets","5.flutter/3.widgets","i-lucide-layout",{"title":184,"path":185,"stem":186,"icon":187},"Router Guard","/flutter/router-guard","5.flutter/4.router-guard","i-lucide-signpost",{"title":189,"path":190,"stem":191,"icon":192},"App Binding","/flutter/app-binding","5.flutter/5.app-binding","i-lucide-cpu",{"title":194,"path":195,"stem":196,"children":197,"page":6},"API Reference","/api-reference","6.api-reference",[198,202,206,211,216,221,225,230],{"title":199,"path":200,"stem":201},"AuthyraClient","/api-reference/authyra-client","6.api-reference/1.authyra-client",{"title":203,"path":204,"stem":205},"AuthyraInstance","/api-reference/authyra-instance","6.api-reference/2.authyra-instance",{"title":207,"path":208,"stem":209,"icon":210},"AccountManager","/api-reference/account-manager","6.api-reference/3.account-manager","i-lucide-users-round",{"title":212,"path":213,"stem":214,"icon":215},"AuthProvider","/api-reference/auth-provider","6.api-reference/4.auth-provider","i-lucide-plug-zap",{"title":217,"path":218,"stem":219,"icon":220},"AuthStorage","/api-reference/auth-storage","6.api-reference/5.auth-storage","i-lucide-hard-drive",{"title":222,"path":223,"stem":224,"icon":68},"AuthSession","/api-reference/auth-session","6.api-reference/6.auth-session",{"title":226,"path":227,"stem":228,"icon":229},"AuthState","/api-reference/auth-state","6.api-reference/7.auth-state","i-lucide-toggle-right",{"title":231,"path":232,"stem":233,"icon":234},"Exceptions","/api-reference/auth-exceptions","6.api-reference/8.auth-exceptions","i-lucide-triangle-alert",{"title":236,"path":237,"stem":238,"children":239,"page":6},"Examples","/examples","7.examples",[240,244,249],{"title":241,"path":242,"stem":243},"Flutter App Example","/examples/flutter-app","7.examples/1.flutter-app",{"title":245,"path":246,"stem":247,"icon":248},"Dart Backend","/examples/dart-backend","7.examples/2.dart-backend","i-lucide-server",{"title":250,"path":251,"stem":252,"icon":163},"Testing Setup","/examples/testing-setup","7.examples/3.testing-setup",{"title":254,"path":255,"stem":256},"Troubleshooting","/troubleshooting","8.troubleshooting",{"title":258,"path":259,"stem":260},"FAQ","/faq","9.faq",{"title":262,"path":263,"stem":264},"Changelog","/changelog","changelog",{"id":266,"title":241,"body":267,"description":3600,"extension":3601,"links":3602,"meta":3603,"navigation":393,"path":242,"seo":3604,"stem":243,"__hash__":3607},"docs/7.examples/1.flutter-app.md",{"type":268,"value":269,"toc":3591},"minimark",[270,279,282,287,345,347,351,1119,1121,1124,1512,1514,1518,2911,2913,2917,3442,3444,3448,3552,3554,3558,3587],[271,272,273,274,278],"p",{},"A complete Flutter app demonstrating email/password login and Google Sign-In. All auth state is managed by Authyra; the UI reacts to ",[275,276,277],"code",{},"authStateChanges",".",[280,281],"hr",{},[283,284,286],"h2",{"id":285},"setup","Setup",[288,289,295],"pre",{"className":290,"code":291,"filename":292,"language":293,"meta":294,"style":294},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dependencies:\n  authyra_flutter: ^0.1.0\n  app_links: ^6.0.0\n  go_router: ^14.0.0\n","pubspec.yaml","yaml","",[275,296,297,310,323,334],{"__ignoreMap":294},[298,299,302,306],"span",{"class":300,"line":301},"line",1,[298,303,305],{"class":304},"swJcz","dependencies",[298,307,309],{"class":308},"sMK4o",":\n",[298,311,313,316,319],{"class":300,"line":312},2,[298,314,315],{"class":304},"  authyra_flutter",[298,317,318],{"class":308},":",[298,320,322],{"class":321},"sfazB"," ^0.1.0\n",[298,324,326,329,331],{"class":300,"line":325},3,[298,327,328],{"class":304},"  app_links",[298,330,318],{"class":308},[298,332,333],{"class":321}," ^6.0.0\n",[298,335,337,340,342],{"class":300,"line":336},4,[298,338,339],{"class":304},"  go_router",[298,341,318],{"class":308},[298,343,344],{"class":321}," ^14.0.0\n",[280,346],{},[283,348,350],{"id":349},"entry-point","Entry point",[288,352,357],{"className":353,"code":354,"filename":355,"language":356,"meta":294,"style":294},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:app_links/app_links.dart';\nimport 'package:authyra_flutter/authyra_flutter.dart';\nimport 'package:flutter/material.dart';\n\nimport 'router.dart';\n\nFuture\u003Cvoid> main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n\n  // 1. Build providers\n  final googleProvider = GoogleProvider(\n    clientId: 'YOUR_GOOGLE_CLIENT_ID',\n    // redirectUri defaults to com.googleusercontent.apps.\u003CclientId>:/oauth2redirect\n  );\n\n  // 2. Wire deep-link callback before Authyra.initialize\n  OAuth2CallbackHandler.registerProvider(\n    'com.googleusercontent.apps.YOUR_GOOGLE_CLIENT_ID',\n    googleProvider,\n  );\n  AppLinks().uriLinkStream.listen(OAuth2CallbackHandler.handleCallback);\n\n  // 3. Initialize — restores any persisted session\n  await Authyra.initialize(\n    client: AuthyraClient(\n      providers: [\n        CredentialsProvider.withTokens(\n          id: 'email',\n          authorize: (creds) async {\n            final res = await Api.post('/auth/login', body: creds);\n            if (res.statusCode != 200) return null;\n            return AuthSignInResult(\n              user: AuthUser(id: res.data['id'], email: res.data['email']),\n              accessToken:  res.data['accessToken'],\n              refreshToken: res.data['refreshToken'],\n              expiresAt:    DateTime.parse(res.data['expiresAt']),\n            );\n          },\n        ),\n        googleProvider,\n      ],\n      storage: SecureAuthStorage(),\n      config: const AuthConfig(autoRefresh: true),\n    ),\n  );\n\n  runApp(const MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp.router(routerConfig: router);\n  }\n}\n","lib/main.dart","dart",[275,358,359,371,380,389,395,405,410,442,458,463,470,488,502,508,516,521,527,540,548,556,563,594,599,605,621,634,645,658,671,686,726,755,766,817,839,860,890,898,906,914,922,930,945,972,980,987,992,1011,1017,1022,1038,1056,1061,1067,1084,1108,1114],{"__ignoreMap":294},[298,360,361,365,368],{"class":300,"line":301},[298,362,364],{"class":363},"sbssI","import",[298,366,367],{"class":321}," 'package:app_links/app_links.dart'",[298,369,370],{"class":308},";\n",[298,372,373,375,378],{"class":300,"line":312},[298,374,364],{"class":363},[298,376,377],{"class":321}," 'package:authyra_flutter/authyra_flutter.dart'",[298,379,370],{"class":308},[298,381,382,384,387],{"class":300,"line":325},[298,383,364],{"class":363},[298,385,386],{"class":321}," 'package:flutter/material.dart'",[298,388,370],{"class":308},[298,390,391],{"class":300,"line":336},[298,392,394],{"emptyLinePlaceholder":393},true,"\n",[298,396,398,400,403],{"class":300,"line":397},5,[298,399,364],{"class":363},[298,401,402],{"class":321}," 'router.dart'",[298,404,370],{"class":308},[298,406,408],{"class":300,"line":407},6,[298,409,394],{"emptyLinePlaceholder":393},[298,411,413,417,421,425,428,432,435,439],{"class":300,"line":412},7,[298,414,416],{"class":415},"sBMFI","Future",[298,418,420],{"class":419},"sTEyZ","\u003C",[298,422,424],{"class":423},"spNyl","void",[298,426,427],{"class":419},"> ",[298,429,431],{"class":430},"s2Zo4","main",[298,433,434],{"class":419},"() ",[298,436,438],{"class":437},"s7zQu","async",[298,440,441],{"class":419}," {\n",[298,443,445,448,450,453,456],{"class":300,"line":444},8,[298,446,447],{"class":415},"  WidgetsFlutterBinding",[298,449,278],{"class":308},[298,451,452],{"class":430},"ensureInitialized",[298,454,455],{"class":419},"()",[298,457,370],{"class":308},[298,459,461],{"class":300,"line":460},9,[298,462,394],{"emptyLinePlaceholder":393},[298,464,466],{"class":300,"line":465},10,[298,467,469],{"class":468},"sHwdD","  // 1. Build providers\n",[298,471,473,476,479,482,485],{"class":300,"line":472},11,[298,474,475],{"class":423},"  final",[298,477,478],{"class":419}," googleProvider ",[298,480,481],{"class":308},"=",[298,483,484],{"class":415}," GoogleProvider",[298,486,487],{"class":419},"(\n",[298,489,491,494,496,499],{"class":300,"line":490},12,[298,492,493],{"class":419},"    clientId",[298,495,318],{"class":308},[298,497,498],{"class":321}," 'YOUR_GOOGLE_CLIENT_ID'",[298,500,501],{"class":308},",\n",[298,503,505],{"class":300,"line":504},13,[298,506,507],{"class":468},"    // redirectUri defaults to com.googleusercontent.apps.\u003CclientId>:/oauth2redirect\n",[298,509,511,514],{"class":300,"line":510},14,[298,512,513],{"class":419},"  )",[298,515,370],{"class":308},[298,517,519],{"class":300,"line":518},15,[298,520,394],{"emptyLinePlaceholder":393},[298,522,524],{"class":300,"line":523},16,[298,525,526],{"class":468},"  // 2. Wire deep-link callback before Authyra.initialize\n",[298,528,530,533,535,538],{"class":300,"line":529},17,[298,531,532],{"class":415},"  OAuth2CallbackHandler",[298,534,278],{"class":308},[298,536,537],{"class":430},"registerProvider",[298,539,487],{"class":419},[298,541,543,546],{"class":300,"line":542},18,[298,544,545],{"class":321},"    'com.googleusercontent.apps.YOUR_GOOGLE_CLIENT_ID'",[298,547,501],{"class":308},[298,549,551,554],{"class":300,"line":550},19,[298,552,553],{"class":419},"    googleProvider",[298,555,501],{"class":308},[298,557,559,561],{"class":300,"line":558},20,[298,560,513],{"class":419},[298,562,370],{"class":308},[298,564,566,569,571,573,576,578,581,584,587,589,592],{"class":300,"line":565},21,[298,567,568],{"class":415},"  AppLinks",[298,570,455],{"class":419},[298,572,278],{"class":308},[298,574,575],{"class":419},"uriLinkStream",[298,577,278],{"class":308},[298,579,580],{"class":430},"listen",[298,582,583],{"class":419},"(",[298,585,586],{"class":415},"OAuth2CallbackHandler",[298,588,278],{"class":308},[298,590,591],{"class":419},"handleCallback)",[298,593,370],{"class":308},[298,595,597],{"class":300,"line":596},22,[298,598,394],{"emptyLinePlaceholder":393},[298,600,602],{"class":300,"line":601},23,[298,603,604],{"class":468},"  // 3. Initialize — restores any persisted session\n",[298,606,608,611,614,616,619],{"class":300,"line":607},24,[298,609,610],{"class":437},"  await",[298,612,613],{"class":415}," Authyra",[298,615,278],{"class":308},[298,617,618],{"class":430},"initialize",[298,620,487],{"class":419},[298,622,624,627,629,632],{"class":300,"line":623},25,[298,625,626],{"class":419},"    client",[298,628,318],{"class":308},[298,630,631],{"class":415}," AuthyraClient",[298,633,487],{"class":419},[298,635,637,640,642],{"class":300,"line":636},26,[298,638,639],{"class":419},"      providers",[298,641,318],{"class":308},[298,643,644],{"class":419}," [\n",[298,646,648,651,653,656],{"class":300,"line":647},27,[298,649,650],{"class":415},"        CredentialsProvider",[298,652,278],{"class":308},[298,654,655],{"class":430},"withTokens",[298,657,487],{"class":419},[298,659,661,664,666,669],{"class":300,"line":660},28,[298,662,663],{"class":419},"          id",[298,665,318],{"class":308},[298,667,668],{"class":321}," 'email'",[298,670,501],{"class":308},[298,672,674,677,679,682,684],{"class":300,"line":673},29,[298,675,676],{"class":419},"          authorize",[298,678,318],{"class":308},[298,680,681],{"class":419}," (creds) ",[298,683,438],{"class":437},[298,685,441],{"class":419},[298,687,689,692,695,697,700,703,705,708,710,713,716,719,721,724],{"class":300,"line":688},30,[298,690,691],{"class":423},"            final",[298,693,694],{"class":419}," res ",[298,696,481],{"class":308},[298,698,699],{"class":437}," await",[298,701,702],{"class":415}," Api",[298,704,278],{"class":308},[298,706,707],{"class":430},"post",[298,709,583],{"class":419},[298,711,712],{"class":321},"'/auth/login'",[298,714,715],{"class":308},",",[298,717,718],{"class":419}," body",[298,720,318],{"class":308},[298,722,723],{"class":419}," creds)",[298,725,370],{"class":308},[298,727,729,732,735,737,740,743,746,749,752],{"class":300,"line":728},31,[298,730,731],{"class":437},"            if",[298,733,734],{"class":419}," (res",[298,736,278],{"class":308},[298,738,739],{"class":419},"statusCode ",[298,741,742],{"class":308},"!=",[298,744,745],{"class":363}," 200",[298,747,748],{"class":419},") ",[298,750,751],{"class":437},"return",[298,753,754],{"class":308}," null;\n",[298,756,758,761,764],{"class":300,"line":757},32,[298,759,760],{"class":437},"            return",[298,762,763],{"class":415}," AuthSignInResult",[298,765,487],{"class":419},[298,767,769,772,774,777,780,782,785,787,790,793,796,798,801,803,805,807,809,812,815],{"class":300,"line":768},33,[298,770,771],{"class":419},"              user",[298,773,318],{"class":308},[298,775,776],{"class":415}," AuthUser",[298,778,779],{"class":419},"(id",[298,781,318],{"class":308},[298,783,784],{"class":419}," res",[298,786,278],{"class":308},[298,788,789],{"class":419},"data[",[298,791,792],{"class":321},"'id'",[298,794,795],{"class":419},"]",[298,797,715],{"class":308},[298,799,800],{"class":419}," email",[298,802,318],{"class":308},[298,804,784],{"class":419},[298,806,278],{"class":308},[298,808,789],{"class":419},[298,810,811],{"class":321},"'email'",[298,813,814],{"class":419},"])",[298,816,501],{"class":308},[298,818,820,823,825,828,830,832,835,837],{"class":300,"line":819},34,[298,821,822],{"class":419},"              accessToken",[298,824,318],{"class":308},[298,826,827],{"class":419},"  res",[298,829,278],{"class":308},[298,831,789],{"class":419},[298,833,834],{"class":321},"'accessToken'",[298,836,795],{"class":419},[298,838,501],{"class":308},[298,840,842,845,847,849,851,853,856,858],{"class":300,"line":841},35,[298,843,844],{"class":419},"              refreshToken",[298,846,318],{"class":308},[298,848,784],{"class":419},[298,850,278],{"class":308},[298,852,789],{"class":419},[298,854,855],{"class":321},"'refreshToken'",[298,857,795],{"class":419},[298,859,501],{"class":308},[298,861,863,866,868,871,873,876,879,881,883,886,888],{"class":300,"line":862},36,[298,864,865],{"class":419},"              expiresAt",[298,867,318],{"class":308},[298,869,870],{"class":415},"    DateTime",[298,872,278],{"class":308},[298,874,875],{"class":430},"parse",[298,877,878],{"class":419},"(res",[298,880,278],{"class":308},[298,882,789],{"class":419},[298,884,885],{"class":321},"'expiresAt'",[298,887,814],{"class":419},[298,889,501],{"class":308},[298,891,893,896],{"class":300,"line":892},37,[298,894,895],{"class":419},"            )",[298,897,370],{"class":308},[298,899,901,904],{"class":300,"line":900},38,[298,902,903],{"class":419},"          }",[298,905,501],{"class":308},[298,907,909,912],{"class":300,"line":908},39,[298,910,911],{"class":419},"        )",[298,913,501],{"class":308},[298,915,917,920],{"class":300,"line":916},40,[298,918,919],{"class":419},"        googleProvider",[298,921,501],{"class":308},[298,923,925,928],{"class":300,"line":924},41,[298,926,927],{"class":419},"      ]",[298,929,501],{"class":308},[298,931,933,936,938,941,943],{"class":300,"line":932},42,[298,934,935],{"class":419},"      storage",[298,937,318],{"class":308},[298,939,940],{"class":415}," SecureAuthStorage",[298,942,455],{"class":419},[298,944,501],{"class":308},[298,946,948,951,953,956,959,962,964,967,970],{"class":300,"line":947},43,[298,949,950],{"class":419},"      config",[298,952,318],{"class":308},[298,954,955],{"class":423}," const",[298,957,958],{"class":415}," AuthConfig",[298,960,961],{"class":419},"(autoRefresh",[298,963,318],{"class":308},[298,965,966],{"class":308}," true",[298,968,969],{"class":419},")",[298,971,501],{"class":308},[298,973,975,978],{"class":300,"line":974},44,[298,976,977],{"class":419},"    )",[298,979,501],{"class":308},[298,981,983,985],{"class":300,"line":982},45,[298,984,513],{"class":419},[298,986,370],{"class":308},[298,988,990],{"class":300,"line":989},46,[298,991,394],{"emptyLinePlaceholder":393},[298,993,995,998,1000,1003,1006,1009],{"class":300,"line":994},47,[298,996,997],{"class":430},"  runApp",[298,999,583],{"class":419},[298,1001,1002],{"class":423},"const",[298,1004,1005],{"class":415}," MyApp",[298,1007,1008],{"class":419},"())",[298,1010,370],{"class":308},[298,1012,1014],{"class":300,"line":1013},48,[298,1015,1016],{"class":419},"}\n",[298,1018,1020],{"class":300,"line":1019},49,[298,1021,394],{"emptyLinePlaceholder":393},[298,1023,1025,1028,1030,1033,1036],{"class":300,"line":1024},50,[298,1026,1027],{"class":308},"class",[298,1029,1005],{"class":415},[298,1031,1032],{"class":308}," extends",[298,1034,1035],{"class":415}," StatelessWidget",[298,1037,441],{"class":419},[298,1039,1041,1044,1046,1049,1051,1054],{"class":300,"line":1040},51,[298,1042,1043],{"class":423},"  const",[298,1045,1005],{"class":415},[298,1047,1048],{"class":419},"({super",[298,1050,278],{"class":308},[298,1052,1053],{"class":419},"key})",[298,1055,370],{"class":308},[298,1057,1059],{"class":300,"line":1058},52,[298,1060,394],{"emptyLinePlaceholder":393},[298,1062,1064],{"class":300,"line":1063},53,[298,1065,1066],{"class":423},"  @override\n",[298,1068,1070,1073,1076,1078,1081],{"class":300,"line":1069},54,[298,1071,1072],{"class":415},"  Widget",[298,1074,1075],{"class":430}," build",[298,1077,583],{"class":419},[298,1079,1080],{"class":415},"BuildContext",[298,1082,1083],{"class":419}," context) {\n",[298,1085,1087,1090,1093,1095,1098,1101,1103,1106],{"class":300,"line":1086},55,[298,1088,1089],{"class":437},"    return",[298,1091,1092],{"class":415}," MaterialApp",[298,1094,278],{"class":308},[298,1096,1097],{"class":430},"router",[298,1099,1100],{"class":419},"(routerConfig",[298,1102,318],{"class":308},[298,1104,1105],{"class":419}," router)",[298,1107,370],{"class":308},[298,1109,1111],{"class":300,"line":1110},56,[298,1112,1113],{"class":419},"  }\n",[298,1115,1117],{"class":300,"line":1116},57,[298,1118,1016],{"class":419},[280,1120],{},[283,1122,1123],{"id":1097},"Router",[288,1125,1128],{"className":353,"code":1126,"filename":1127,"language":356,"meta":294,"style":294},"import 'package:authyra_flutter/authyra_flutter.dart';\nimport 'package:go_router/go_router.dart';\n\nimport 'pages/home_page.dart';\nimport 'pages/login_page.dart';\n\n/// Minimal Listenable adapter for go_router's refreshListenable.\nclass _StreamListenable extends ChangeNotifier {\n  _StreamListenable(Stream\u003Cdynamic> stream) {\n    stream.listen((_) => notifyListeners());\n  }\n}\n\nfinal router = GoRouter(\n  refreshListenable: _StreamListenable(Authyra.instance.authStateChanges),\n  redirect: (context, state) {\n    final authenticated = Authyra.instance.isAuthenticated;\n    final goingToLogin  = state.uri.path == '/login';\n\n    if (!authenticated && !goingToLogin) return '/login';\n    if (authenticated  &&  goingToLogin) return '/';\n    return null;\n  },\n  routes: [\n    GoRoute(path: '/login', builder: (_, __) => const LoginPage()),\n    GoRoute(path: '/',      builder: (_, __) => const HomePage()),\n  ],\n);\n","lib/router.dart",[275,1129,1130,1138,1147,1151,1160,1169,1173,1178,1192,1210,1232,1236,1240,1244,1259,1285,1300,1323,1353,1357,1386,1405,1411,1418,1427,1465,1499,1506],{"__ignoreMap":294},[298,1131,1132,1134,1136],{"class":300,"line":301},[298,1133,364],{"class":363},[298,1135,377],{"class":321},[298,1137,370],{"class":308},[298,1139,1140,1142,1145],{"class":300,"line":312},[298,1141,364],{"class":363},[298,1143,1144],{"class":321}," 'package:go_router/go_router.dart'",[298,1146,370],{"class":308},[298,1148,1149],{"class":300,"line":325},[298,1150,394],{"emptyLinePlaceholder":393},[298,1152,1153,1155,1158],{"class":300,"line":336},[298,1154,364],{"class":363},[298,1156,1157],{"class":321}," 'pages/home_page.dart'",[298,1159,370],{"class":308},[298,1161,1162,1164,1167],{"class":300,"line":397},[298,1163,364],{"class":363},[298,1165,1166],{"class":321}," 'pages/login_page.dart'",[298,1168,370],{"class":308},[298,1170,1171],{"class":300,"line":407},[298,1172,394],{"emptyLinePlaceholder":393},[298,1174,1175],{"class":300,"line":412},[298,1176,1177],{"class":468},"/// Minimal Listenable adapter for go_router's refreshListenable.\n",[298,1179,1180,1182,1185,1187,1190],{"class":300,"line":444},[298,1181,1027],{"class":308},[298,1183,1184],{"class":415}," _StreamListenable",[298,1186,1032],{"class":308},[298,1188,1189],{"class":415}," ChangeNotifier",[298,1191,441],{"class":419},[298,1193,1194,1197,1199,1202,1204,1207],{"class":300,"line":460},[298,1195,1196],{"class":415},"  _StreamListenable",[298,1198,583],{"class":419},[298,1200,1201],{"class":415},"Stream",[298,1203,420],{"class":419},[298,1205,1206],{"class":415},"dynamic",[298,1208,1209],{"class":419},"> stream) {\n",[298,1211,1212,1215,1217,1219,1222,1225,1228,1230],{"class":300,"line":465},[298,1213,1214],{"class":419},"    stream",[298,1216,278],{"class":308},[298,1218,580],{"class":430},[298,1220,1221],{"class":419},"((_) ",[298,1223,1224],{"class":308},"=>",[298,1226,1227],{"class":430}," notifyListeners",[298,1229,1008],{"class":419},[298,1231,370],{"class":308},[298,1233,1234],{"class":300,"line":472},[298,1235,1113],{"class":419},[298,1237,1238],{"class":300,"line":490},[298,1239,1016],{"class":419},[298,1241,1242],{"class":300,"line":504},[298,1243,394],{"emptyLinePlaceholder":393},[298,1245,1246,1249,1252,1254,1257],{"class":300,"line":510},[298,1247,1248],{"class":423},"final",[298,1250,1251],{"class":419}," router ",[298,1253,481],{"class":308},[298,1255,1256],{"class":415}," GoRouter",[298,1258,487],{"class":419},[298,1260,1261,1264,1266,1268,1270,1273,1275,1278,1280,1283],{"class":300,"line":518},[298,1262,1263],{"class":419},"  refreshListenable",[298,1265,318],{"class":308},[298,1267,1184],{"class":415},[298,1269,583],{"class":419},[298,1271,1272],{"class":415},"Authyra",[298,1274,278],{"class":308},[298,1276,1277],{"class":419},"instance",[298,1279,278],{"class":308},[298,1281,1282],{"class":419},"authStateChanges)",[298,1284,501],{"class":308},[298,1286,1287,1290,1292,1295,1297],{"class":300,"line":523},[298,1288,1289],{"class":419},"  redirect",[298,1291,318],{"class":308},[298,1293,1294],{"class":419}," (context",[298,1296,715],{"class":308},[298,1298,1299],{"class":419}," state) {\n",[298,1301,1302,1305,1308,1310,1312,1314,1316,1318,1321],{"class":300,"line":529},[298,1303,1304],{"class":423},"    final",[298,1306,1307],{"class":419}," authenticated ",[298,1309,481],{"class":308},[298,1311,613],{"class":415},[298,1313,278],{"class":308},[298,1315,1277],{"class":419},[298,1317,278],{"class":308},[298,1319,1320],{"class":419},"isAuthenticated",[298,1322,370],{"class":308},[298,1324,1325,1327,1330,1332,1335,1337,1340,1342,1345,1348,1351],{"class":300,"line":542},[298,1326,1304],{"class":423},[298,1328,1329],{"class":419}," goingToLogin  ",[298,1331,481],{"class":308},[298,1333,1334],{"class":419}," state",[298,1336,278],{"class":308},[298,1338,1339],{"class":419},"uri",[298,1341,278],{"class":308},[298,1343,1344],{"class":419},"path ",[298,1346,1347],{"class":308},"==",[298,1349,1350],{"class":321}," '/login'",[298,1352,370],{"class":308},[298,1354,1355],{"class":300,"line":550},[298,1356,394],{"emptyLinePlaceholder":393},[298,1358,1359,1362,1365,1368,1371,1374,1377,1380,1382,1384],{"class":300,"line":558},[298,1360,1361],{"class":437},"    if",[298,1363,1364],{"class":419}," (",[298,1366,1367],{"class":308},"!",[298,1369,1370],{"class":419},"authenticated ",[298,1372,1373],{"class":308},"&&",[298,1375,1376],{"class":308}," !",[298,1378,1379],{"class":419},"goingToLogin) ",[298,1381,751],{"class":437},[298,1383,1350],{"class":321},[298,1385,370],{"class":308},[298,1387,1388,1390,1393,1395,1398,1400,1403],{"class":300,"line":565},[298,1389,1361],{"class":437},[298,1391,1392],{"class":419}," (authenticated  ",[298,1394,1373],{"class":308},[298,1396,1397],{"class":419},"  goingToLogin) ",[298,1399,751],{"class":437},[298,1401,1402],{"class":321}," '/'",[298,1404,370],{"class":308},[298,1406,1407,1409],{"class":300,"line":596},[298,1408,1089],{"class":437},[298,1410,754],{"class":308},[298,1412,1413,1416],{"class":300,"line":601},[298,1414,1415],{"class":419},"  }",[298,1417,501],{"class":308},[298,1419,1420,1423,1425],{"class":300,"line":607},[298,1421,1422],{"class":419},"  routes",[298,1424,318],{"class":308},[298,1426,644],{"class":419},[298,1428,1429,1432,1435,1437,1439,1441,1444,1446,1449,1451,1454,1456,1458,1461,1463],{"class":300,"line":623},[298,1430,1431],{"class":415},"    GoRoute",[298,1433,1434],{"class":419},"(path",[298,1436,318],{"class":308},[298,1438,1350],{"class":321},[298,1440,715],{"class":308},[298,1442,1443],{"class":419}," builder",[298,1445,318],{"class":308},[298,1447,1448],{"class":419}," (_",[298,1450,715],{"class":308},[298,1452,1453],{"class":419}," __) ",[298,1455,1224],{"class":308},[298,1457,955],{"class":423},[298,1459,1460],{"class":415}," LoginPage",[298,1462,1008],{"class":419},[298,1464,501],{"class":308},[298,1466,1467,1469,1471,1473,1475,1477,1480,1482,1484,1486,1488,1490,1492,1495,1497],{"class":300,"line":636},[298,1468,1431],{"class":415},[298,1470,1434],{"class":419},[298,1472,318],{"class":308},[298,1474,1402],{"class":321},[298,1476,715],{"class":308},[298,1478,1479],{"class":419},"      builder",[298,1481,318],{"class":308},[298,1483,1448],{"class":419},[298,1485,715],{"class":308},[298,1487,1453],{"class":419},[298,1489,1224],{"class":308},[298,1491,955],{"class":423},[298,1493,1494],{"class":415}," HomePage",[298,1496,1008],{"class":419},[298,1498,501],{"class":308},[298,1500,1501,1504],{"class":300,"line":647},[298,1502,1503],{"class":419},"  ]",[298,1505,501],{"class":308},[298,1507,1508,1510],{"class":300,"line":660},[298,1509,969],{"class":419},[298,1511,370],{"class":308},[280,1513],{},[283,1515,1517],{"id":1516},"login-page","Login page",[288,1519,1522],{"className":353,"code":1520,"filename":1521,"language":356,"meta":294,"style":294},"import 'package:authyra_flutter/authyra_flutter.dart';\nimport 'package:flutter/material.dart';\n\nclass LoginPage extends StatefulWidget {\n  const LoginPage({super.key});\n\n  @override\n  State\u003CLoginPage> createState() => _LoginPageState();\n}\n\nclass _LoginPageState extends State\u003CLoginPage> {\n  final _emailCtrl    = TextEditingController();\n  final _passwordCtrl = TextEditingController();\n  bool    _loading = false;\n  String? _error;\n\n  Future\u003Cvoid> _signInWithEmail() async {\n    _setLoading(true);\n    try {\n      await Authyra.instance.signIn('email', params: {\n        'email':    _emailCtrl.text.trim(),\n        'password': _passwordCtrl.text,\n      });\n      // GoRouter redirects to '/' automatically via refreshListenable\n    } on AuthenticationFailedException {\n      _setError('Incorrect email or password.');\n    } catch (_) {\n      _setError('Something went wrong. Please try again.');\n    } finally {\n      _setLoading(false);\n    }\n  }\n\n  Future\u003Cvoid> _signInWithGoogle() async {\n    _setLoading(true);\n    try {\n      await Authyra.instance.signIn('google');\n    } on AuthenticationCancelledException {\n      // user closed the browser — no error to show\n    } on AuthenticationFailedException catch (e) {\n      _setError('Google sign-in failed: $e');\n    } finally {\n      _setLoading(false);\n    }\n  }\n\n  void _setLoading(bool v) => setState(() { _loading = v; _error = null; });\n  void _setError(String msg) => setState(() => _error = msg);\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: SafeArea(\n        child: Padding(\n          padding: const EdgeInsets.all(24),\n          child: Column(\n            mainAxisAlignment: MainAxisAlignment.center,\n            crossAxisAlignment: CrossAxisAlignment.stretch,\n            children: [\n              const Text('Sign in',\n                  style: TextStyle(fontSize: 28, fontWeight: FontWeight.bold)),\n              const SizedBox(height: 32),\n              TextField(\n                controller: _emailCtrl,\n                decoration: const InputDecoration(\n                  labelText: 'Email',\n                  border: OutlineInputBorder(),\n                ),\n                keyboardType: TextInputType.emailAddress,\n              ),\n              const SizedBox(height: 12),\n              TextField(\n                controller: _passwordCtrl,\n                decoration: const InputDecoration(\n                  labelText: 'Password',\n                  border: OutlineInputBorder(),\n                ),\n                obscureText: true,\n              ),\n              if (_error != null) ...[\n                const SizedBox(height: 12),\n                Text(_error!,\n                    style: const TextStyle(color: Colors.red)),\n              ],\n              const SizedBox(height: 24),\n              FilledButton(\n                onPressed: _loading ? null : _signInWithEmail,\n                child: _loading\n                    ? const SizedBox.square(\n                        dimension: 20,\n                        child: CircularProgressIndicator(strokeWidth: 2),\n                      )\n                    : const Text('Continue with email'),\n              ),\n              const SizedBox(height: 12),\n              OutlinedButton.icon(\n                onPressed: _loading ? null : _signInWithGoogle,\n                icon: const Icon(Icons.g_mobiledata),\n                label: const Text('Continue with Google'),\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n","lib/pages/login_page.dart",[275,1523,1524,1532,1540,1544,1557,1571,1575,1579,1605,1609,1613,1631,1647,1662,1675,1688,1692,1712,1726,1733,1762,1786,1802,1809,1814,1827,1841,1851,1864,1873,1887,1892,1896,1900,1919,1931,1937,1960,1971,1976,1990,2013,2021,2033,2037,2041,2045,2090,2123,2127,2131,2143,2152,2164,2176,2202,2214,2231,2249,2259,2275,2311,2331,2339,2352,2367,2380,2395,2403,2421,2429,2447,2454,2465,2478,2490,2503,2510,2521,2528,2550,2568,2580,2607,2615,2633,2641,2664,2675,2692,2705,2728,2734,2753,2760,2777,2790,2810,2835,2856,2863,2871,2879,2886,2894,2901,2906],{"__ignoreMap":294},[298,1525,1526,1528,1530],{"class":300,"line":301},[298,1527,364],{"class":363},[298,1529,377],{"class":321},[298,1531,370],{"class":308},[298,1533,1534,1536,1538],{"class":300,"line":312},[298,1535,364],{"class":363},[298,1537,386],{"class":321},[298,1539,370],{"class":308},[298,1541,1542],{"class":300,"line":325},[298,1543,394],{"emptyLinePlaceholder":393},[298,1545,1546,1548,1550,1552,1555],{"class":300,"line":336},[298,1547,1027],{"class":308},[298,1549,1460],{"class":415},[298,1551,1032],{"class":308},[298,1553,1554],{"class":415}," StatefulWidget",[298,1556,441],{"class":419},[298,1558,1559,1561,1563,1565,1567,1569],{"class":300,"line":397},[298,1560,1043],{"class":423},[298,1562,1460],{"class":415},[298,1564,1048],{"class":419},[298,1566,278],{"class":308},[298,1568,1053],{"class":419},[298,1570,370],{"class":308},[298,1572,1573],{"class":300,"line":407},[298,1574,394],{"emptyLinePlaceholder":393},[298,1576,1577],{"class":300,"line":412},[298,1578,1066],{"class":423},[298,1580,1581,1584,1586,1589,1591,1594,1596,1598,1601,1603],{"class":300,"line":444},[298,1582,1583],{"class":415},"  State",[298,1585,420],{"class":419},[298,1587,1588],{"class":415},"LoginPage",[298,1590,427],{"class":419},[298,1592,1593],{"class":430},"createState",[298,1595,434],{"class":419},[298,1597,1224],{"class":308},[298,1599,1600],{"class":415}," _LoginPageState",[298,1602,455],{"class":419},[298,1604,370],{"class":308},[298,1606,1607],{"class":300,"line":460},[298,1608,1016],{"class":419},[298,1610,1611],{"class":300,"line":465},[298,1612,394],{"emptyLinePlaceholder":393},[298,1614,1615,1617,1619,1621,1624,1626,1628],{"class":300,"line":472},[298,1616,1027],{"class":308},[298,1618,1600],{"class":415},[298,1620,1032],{"class":308},[298,1622,1623],{"class":415}," State",[298,1625,420],{"class":419},[298,1627,1588],{"class":415},[298,1629,1630],{"class":419},"> {\n",[298,1632,1633,1635,1638,1640,1643,1645],{"class":300,"line":490},[298,1634,475],{"class":423},[298,1636,1637],{"class":419}," _emailCtrl    ",[298,1639,481],{"class":308},[298,1641,1642],{"class":415}," TextEditingController",[298,1644,455],{"class":419},[298,1646,370],{"class":308},[298,1648,1649,1651,1654,1656,1658,1660],{"class":300,"line":504},[298,1650,475],{"class":423},[298,1652,1653],{"class":419}," _passwordCtrl ",[298,1655,481],{"class":308},[298,1657,1642],{"class":415},[298,1659,455],{"class":419},[298,1661,370],{"class":308},[298,1663,1664,1667,1670,1672],{"class":300,"line":510},[298,1665,1666],{"class":415},"  bool",[298,1668,1669],{"class":419},"    _loading ",[298,1671,481],{"class":308},[298,1673,1674],{"class":308}," false;\n",[298,1676,1677,1680,1683,1686],{"class":300,"line":518},[298,1678,1679],{"class":415},"  String",[298,1681,1682],{"class":308},"?",[298,1684,1685],{"class":419}," _error",[298,1687,370],{"class":308},[298,1689,1690],{"class":300,"line":523},[298,1691,394],{"emptyLinePlaceholder":393},[298,1693,1694,1697,1699,1701,1703,1706,1708,1710],{"class":300,"line":529},[298,1695,1696],{"class":415},"  Future",[298,1698,420],{"class":419},[298,1700,424],{"class":423},[298,1702,427],{"class":419},[298,1704,1705],{"class":430},"_signInWithEmail",[298,1707,434],{"class":419},[298,1709,438],{"class":437},[298,1711,441],{"class":419},[298,1713,1714,1717,1719,1722,1724],{"class":300,"line":542},[298,1715,1716],{"class":430},"    _setLoading",[298,1718,583],{"class":419},[298,1720,1721],{"class":308},"true",[298,1723,969],{"class":419},[298,1725,370],{"class":308},[298,1727,1728,1731],{"class":300,"line":550},[298,1729,1730],{"class":437},"    try",[298,1732,441],{"class":419},[298,1734,1735,1738,1740,1742,1744,1746,1749,1751,1753,1755,1758,1760],{"class":300,"line":558},[298,1736,1737],{"class":437},"      await",[298,1739,613],{"class":415},[298,1741,278],{"class":308},[298,1743,1277],{"class":419},[298,1745,278],{"class":308},[298,1747,1748],{"class":430},"signIn",[298,1750,583],{"class":419},[298,1752,811],{"class":321},[298,1754,715],{"class":308},[298,1756,1757],{"class":419}," params",[298,1759,318],{"class":308},[298,1761,441],{"class":419},[298,1763,1764,1767,1769,1772,1774,1777,1779,1782,1784],{"class":300,"line":565},[298,1765,1766],{"class":321},"        'email'",[298,1768,318],{"class":308},[298,1770,1771],{"class":419},"    _emailCtrl",[298,1773,278],{"class":308},[298,1775,1776],{"class":419},"text",[298,1778,278],{"class":308},[298,1780,1781],{"class":430},"trim",[298,1783,455],{"class":419},[298,1785,501],{"class":308},[298,1787,1788,1791,1793,1796,1798,1800],{"class":300,"line":596},[298,1789,1790],{"class":321},"        'password'",[298,1792,318],{"class":308},[298,1794,1795],{"class":419}," _passwordCtrl",[298,1797,278],{"class":308},[298,1799,1776],{"class":419},[298,1801,501],{"class":308},[298,1803,1804,1807],{"class":300,"line":601},[298,1805,1806],{"class":419},"      })",[298,1808,370],{"class":308},[298,1810,1811],{"class":300,"line":607},[298,1812,1813],{"class":468},"      // GoRouter redirects to '/' automatically via refreshListenable\n",[298,1815,1816,1819,1822,1825],{"class":300,"line":623},[298,1817,1818],{"class":419},"    } ",[298,1820,1821],{"class":437},"on",[298,1823,1824],{"class":415}," AuthenticationFailedException",[298,1826,441],{"class":419},[298,1828,1829,1832,1834,1837,1839],{"class":300,"line":636},[298,1830,1831],{"class":430},"      _setError",[298,1833,583],{"class":419},[298,1835,1836],{"class":321},"'Incorrect email or password.'",[298,1838,969],{"class":419},[298,1840,370],{"class":308},[298,1842,1843,1845,1848],{"class":300,"line":647},[298,1844,1818],{"class":419},[298,1846,1847],{"class":437},"catch",[298,1849,1850],{"class":419}," (_) {\n",[298,1852,1853,1855,1857,1860,1862],{"class":300,"line":660},[298,1854,1831],{"class":430},[298,1856,583],{"class":419},[298,1858,1859],{"class":321},"'Something went wrong. Please try again.'",[298,1861,969],{"class":419},[298,1863,370],{"class":308},[298,1865,1866,1868,1871],{"class":300,"line":673},[298,1867,1818],{"class":419},[298,1869,1870],{"class":437},"finally",[298,1872,441],{"class":419},[298,1874,1875,1878,1880,1883,1885],{"class":300,"line":688},[298,1876,1877],{"class":430},"      _setLoading",[298,1879,583],{"class":419},[298,1881,1882],{"class":308},"false",[298,1884,969],{"class":419},[298,1886,370],{"class":308},[298,1888,1889],{"class":300,"line":728},[298,1890,1891],{"class":419},"    }\n",[298,1893,1894],{"class":300,"line":757},[298,1895,1113],{"class":419},[298,1897,1898],{"class":300,"line":768},[298,1899,394],{"emptyLinePlaceholder":393},[298,1901,1902,1904,1906,1908,1910,1913,1915,1917],{"class":300,"line":819},[298,1903,1696],{"class":415},[298,1905,420],{"class":419},[298,1907,424],{"class":423},[298,1909,427],{"class":419},[298,1911,1912],{"class":430},"_signInWithGoogle",[298,1914,434],{"class":419},[298,1916,438],{"class":437},[298,1918,441],{"class":419},[298,1920,1921,1923,1925,1927,1929],{"class":300,"line":841},[298,1922,1716],{"class":430},[298,1924,583],{"class":419},[298,1926,1721],{"class":308},[298,1928,969],{"class":419},[298,1930,370],{"class":308},[298,1932,1933,1935],{"class":300,"line":862},[298,1934,1730],{"class":437},[298,1936,441],{"class":419},[298,1938,1939,1941,1943,1945,1947,1949,1951,1953,1956,1958],{"class":300,"line":892},[298,1940,1737],{"class":437},[298,1942,613],{"class":415},[298,1944,278],{"class":308},[298,1946,1277],{"class":419},[298,1948,278],{"class":308},[298,1950,1748],{"class":430},[298,1952,583],{"class":419},[298,1954,1955],{"class":321},"'google'",[298,1957,969],{"class":419},[298,1959,370],{"class":308},[298,1961,1962,1964,1966,1969],{"class":300,"line":900},[298,1963,1818],{"class":419},[298,1965,1821],{"class":437},[298,1967,1968],{"class":415}," AuthenticationCancelledException",[298,1970,441],{"class":419},[298,1972,1973],{"class":300,"line":908},[298,1974,1975],{"class":468},"      // user closed the browser — no error to show\n",[298,1977,1978,1980,1982,1984,1987],{"class":300,"line":916},[298,1979,1818],{"class":419},[298,1981,1821],{"class":437},[298,1983,1824],{"class":415},[298,1985,1986],{"class":437}," catch",[298,1988,1989],{"class":419}," (e) {\n",[298,1991,1992,1994,1996,1999,2002,2006,2009,2011],{"class":300,"line":924},[298,1993,1831],{"class":430},[298,1995,583],{"class":419},[298,1997,1998],{"class":321},"'Google sign-in failed: ",[298,2000,2001],{"class":419},"$",[298,2003,2005],{"class":2004},"sHdIc","e",[298,2007,2008],{"class":321},"'",[298,2010,969],{"class":419},[298,2012,370],{"class":308},[298,2014,2015,2017,2019],{"class":300,"line":932},[298,2016,1818],{"class":419},[298,2018,1870],{"class":437},[298,2020,441],{"class":419},[298,2022,2023,2025,2027,2029,2031],{"class":300,"line":947},[298,2024,1877],{"class":430},[298,2026,583],{"class":419},[298,2028,1882],{"class":308},[298,2030,969],{"class":419},[298,2032,370],{"class":308},[298,2034,2035],{"class":300,"line":974},[298,2036,1891],{"class":419},[298,2038,2039],{"class":300,"line":982},[298,2040,1113],{"class":419},[298,2042,2043],{"class":300,"line":989},[298,2044,394],{"emptyLinePlaceholder":393},[298,2046,2047,2050,2053,2055,2058,2061,2063,2066,2069,2071,2074,2077,2080,2082,2085,2088],{"class":300,"line":994},[298,2048,2049],{"class":423},"  void",[298,2051,2052],{"class":430}," _setLoading",[298,2054,583],{"class":419},[298,2056,2057],{"class":415},"bool",[298,2059,2060],{"class":419}," v) ",[298,2062,1224],{"class":308},[298,2064,2065],{"class":430}," setState",[298,2067,2068],{"class":419},"(() { _loading ",[298,2070,481],{"class":308},[298,2072,2073],{"class":419}," v",[298,2075,2076],{"class":308},";",[298,2078,2079],{"class":419}," _error ",[298,2081,481],{"class":308},[298,2083,2084],{"class":308}," null;",[298,2086,2087],{"class":419}," })",[298,2089,370],{"class":308},[298,2091,2092,2094,2097,2099,2102,2105,2107,2109,2112,2114,2116,2118,2121],{"class":300,"line":1013},[298,2093,2049],{"class":423},[298,2095,2096],{"class":430}," _setError",[298,2098,583],{"class":419},[298,2100,2101],{"class":415},"String",[298,2103,2104],{"class":419}," msg) ",[298,2106,1224],{"class":308},[298,2108,2065],{"class":430},[298,2110,2111],{"class":419},"(() ",[298,2113,1224],{"class":308},[298,2115,2079],{"class":419},[298,2117,481],{"class":308},[298,2119,2120],{"class":419}," msg)",[298,2122,370],{"class":308},[298,2124,2125],{"class":300,"line":1019},[298,2126,394],{"emptyLinePlaceholder":393},[298,2128,2129],{"class":300,"line":1024},[298,2130,1066],{"class":423},[298,2132,2133,2135,2137,2139,2141],{"class":300,"line":1040},[298,2134,1072],{"class":415},[298,2136,1075],{"class":430},[298,2138,583],{"class":419},[298,2140,1080],{"class":415},[298,2142,1083],{"class":419},[298,2144,2145,2147,2150],{"class":300,"line":1058},[298,2146,1089],{"class":437},[298,2148,2149],{"class":415}," Scaffold",[298,2151,487],{"class":419},[298,2153,2154,2157,2159,2162],{"class":300,"line":1063},[298,2155,2156],{"class":419},"      body",[298,2158,318],{"class":308},[298,2160,2161],{"class":415}," SafeArea",[298,2163,487],{"class":419},[298,2165,2166,2169,2171,2174],{"class":300,"line":1069},[298,2167,2168],{"class":419},"        child",[298,2170,318],{"class":308},[298,2172,2173],{"class":415}," Padding",[298,2175,487],{"class":419},[298,2177,2178,2181,2183,2185,2188,2190,2193,2195,2198,2200],{"class":300,"line":1086},[298,2179,2180],{"class":419},"          padding",[298,2182,318],{"class":308},[298,2184,955],{"class":423},[298,2186,2187],{"class":415}," EdgeInsets",[298,2189,278],{"class":308},[298,2191,2192],{"class":430},"all",[298,2194,583],{"class":419},[298,2196,2197],{"class":363},"24",[298,2199,969],{"class":419},[298,2201,501],{"class":308},[298,2203,2204,2207,2209,2212],{"class":300,"line":1110},[298,2205,2206],{"class":419},"          child",[298,2208,318],{"class":308},[298,2210,2211],{"class":415}," Column",[298,2213,487],{"class":419},[298,2215,2216,2219,2221,2224,2226,2229],{"class":300,"line":1116},[298,2217,2218],{"class":419},"            mainAxisAlignment",[298,2220,318],{"class":308},[298,2222,2223],{"class":415}," MainAxisAlignment",[298,2225,278],{"class":308},[298,2227,2228],{"class":419},"center",[298,2230,501],{"class":308},[298,2232,2234,2237,2239,2242,2244,2247],{"class":300,"line":2233},58,[298,2235,2236],{"class":419},"            crossAxisAlignment",[298,2238,318],{"class":308},[298,2240,2241],{"class":415}," CrossAxisAlignment",[298,2243,278],{"class":308},[298,2245,2246],{"class":419},"stretch",[298,2248,501],{"class":308},[298,2250,2252,2255,2257],{"class":300,"line":2251},59,[298,2253,2254],{"class":419},"            children",[298,2256,318],{"class":308},[298,2258,644],{"class":419},[298,2260,2262,2265,2268,2270,2273],{"class":300,"line":2261},60,[298,2263,2264],{"class":423},"              const",[298,2266,2267],{"class":415}," Text",[298,2269,583],{"class":419},[298,2271,2272],{"class":321},"'Sign in'",[298,2274,501],{"class":308},[298,2276,2278,2281,2283,2286,2289,2291,2294,2296,2299,2301,2304,2306,2309],{"class":300,"line":2277},61,[298,2279,2280],{"class":419},"                  style",[298,2282,318],{"class":308},[298,2284,2285],{"class":415}," TextStyle",[298,2287,2288],{"class":419},"(fontSize",[298,2290,318],{"class":308},[298,2292,2293],{"class":363}," 28",[298,2295,715],{"class":308},[298,2297,2298],{"class":419}," fontWeight",[298,2300,318],{"class":308},[298,2302,2303],{"class":415}," FontWeight",[298,2305,278],{"class":308},[298,2307,2308],{"class":419},"bold))",[298,2310,501],{"class":308},[298,2312,2314,2316,2319,2322,2324,2327,2329],{"class":300,"line":2313},62,[298,2315,2264],{"class":423},[298,2317,2318],{"class":415}," SizedBox",[298,2320,2321],{"class":419},"(height",[298,2323,318],{"class":308},[298,2325,2326],{"class":363}," 32",[298,2328,969],{"class":419},[298,2330,501],{"class":308},[298,2332,2334,2337],{"class":300,"line":2333},63,[298,2335,2336],{"class":415},"              TextField",[298,2338,487],{"class":419},[298,2340,2342,2345,2347,2350],{"class":300,"line":2341},64,[298,2343,2344],{"class":419},"                controller",[298,2346,318],{"class":308},[298,2348,2349],{"class":419}," _emailCtrl",[298,2351,501],{"class":308},[298,2353,2355,2358,2360,2362,2365],{"class":300,"line":2354},65,[298,2356,2357],{"class":419},"                decoration",[298,2359,318],{"class":308},[298,2361,955],{"class":423},[298,2363,2364],{"class":415}," InputDecoration",[298,2366,487],{"class":419},[298,2368,2370,2373,2375,2378],{"class":300,"line":2369},66,[298,2371,2372],{"class":419},"                  labelText",[298,2374,318],{"class":308},[298,2376,2377],{"class":321}," 'Email'",[298,2379,501],{"class":308},[298,2381,2383,2386,2388,2391,2393],{"class":300,"line":2382},67,[298,2384,2385],{"class":419},"                  border",[298,2387,318],{"class":308},[298,2389,2390],{"class":415}," OutlineInputBorder",[298,2392,455],{"class":419},[298,2394,501],{"class":308},[298,2396,2398,2401],{"class":300,"line":2397},68,[298,2399,2400],{"class":419},"                )",[298,2402,501],{"class":308},[298,2404,2406,2409,2411,2414,2416,2419],{"class":300,"line":2405},69,[298,2407,2408],{"class":419},"                keyboardType",[298,2410,318],{"class":308},[298,2412,2413],{"class":415}," TextInputType",[298,2415,278],{"class":308},[298,2417,2418],{"class":419},"emailAddress",[298,2420,501],{"class":308},[298,2422,2424,2427],{"class":300,"line":2423},70,[298,2425,2426],{"class":419},"              )",[298,2428,501],{"class":308},[298,2430,2432,2434,2436,2438,2440,2443,2445],{"class":300,"line":2431},71,[298,2433,2264],{"class":423},[298,2435,2318],{"class":415},[298,2437,2321],{"class":419},[298,2439,318],{"class":308},[298,2441,2442],{"class":363}," 12",[298,2444,969],{"class":419},[298,2446,501],{"class":308},[298,2448,2450,2452],{"class":300,"line":2449},72,[298,2451,2336],{"class":415},[298,2453,487],{"class":419},[298,2455,2457,2459,2461,2463],{"class":300,"line":2456},73,[298,2458,2344],{"class":419},[298,2460,318],{"class":308},[298,2462,1795],{"class":419},[298,2464,501],{"class":308},[298,2466,2468,2470,2472,2474,2476],{"class":300,"line":2467},74,[298,2469,2357],{"class":419},[298,2471,318],{"class":308},[298,2473,955],{"class":423},[298,2475,2364],{"class":415},[298,2477,487],{"class":419},[298,2479,2481,2483,2485,2488],{"class":300,"line":2480},75,[298,2482,2372],{"class":419},[298,2484,318],{"class":308},[298,2486,2487],{"class":321}," 'Password'",[298,2489,501],{"class":308},[298,2491,2493,2495,2497,2499,2501],{"class":300,"line":2492},76,[298,2494,2385],{"class":419},[298,2496,318],{"class":308},[298,2498,2390],{"class":415},[298,2500,455],{"class":419},[298,2502,501],{"class":308},[298,2504,2506,2508],{"class":300,"line":2505},77,[298,2507,2400],{"class":419},[298,2509,501],{"class":308},[298,2511,2513,2516,2518],{"class":300,"line":2512},78,[298,2514,2515],{"class":419},"                obscureText",[298,2517,318],{"class":308},[298,2519,2520],{"class":308}," true,\n",[298,2522,2524,2526],{"class":300,"line":2523},79,[298,2525,2426],{"class":419},[298,2527,501],{"class":308},[298,2529,2531,2534,2537,2539,2542,2544,2547],{"class":300,"line":2530},80,[298,2532,2533],{"class":437},"              if",[298,2535,2536],{"class":419}," (_error ",[298,2538,742],{"class":308},[298,2540,2541],{"class":308}," null",[298,2543,748],{"class":419},[298,2545,2546],{"class":308},"...",[298,2548,2549],{"class":419},"[\n",[298,2551,2553,2556,2558,2560,2562,2564,2566],{"class":300,"line":2552},81,[298,2554,2555],{"class":423},"                const",[298,2557,2318],{"class":415},[298,2559,2321],{"class":419},[298,2561,318],{"class":308},[298,2563,2442],{"class":363},[298,2565,969],{"class":419},[298,2567,501],{"class":308},[298,2569,2571,2574,2577],{"class":300,"line":2570},82,[298,2572,2573],{"class":415},"                Text",[298,2575,2576],{"class":419},"(_error",[298,2578,2579],{"class":308},"!,\n",[298,2581,2583,2586,2588,2590,2592,2595,2597,2600,2602,2605],{"class":300,"line":2582},83,[298,2584,2585],{"class":419},"                    style",[298,2587,318],{"class":308},[298,2589,955],{"class":423},[298,2591,2285],{"class":415},[298,2593,2594],{"class":419},"(color",[298,2596,318],{"class":308},[298,2598,2599],{"class":415}," Colors",[298,2601,278],{"class":308},[298,2603,2604],{"class":419},"red))",[298,2606,501],{"class":308},[298,2608,2610,2613],{"class":300,"line":2609},84,[298,2611,2612],{"class":419},"              ]",[298,2614,501],{"class":308},[298,2616,2618,2620,2622,2624,2626,2629,2631],{"class":300,"line":2617},85,[298,2619,2264],{"class":423},[298,2621,2318],{"class":415},[298,2623,2321],{"class":419},[298,2625,318],{"class":308},[298,2627,2628],{"class":363}," 24",[298,2630,969],{"class":419},[298,2632,501],{"class":308},[298,2634,2636,2639],{"class":300,"line":2635},86,[298,2637,2638],{"class":415},"              FilledButton",[298,2640,487],{"class":419},[298,2642,2644,2647,2649,2652,2654,2656,2659,2662],{"class":300,"line":2643},87,[298,2645,2646],{"class":419},"                onPressed",[298,2648,318],{"class":308},[298,2650,2651],{"class":419}," _loading ",[298,2653,1682],{"class":308},[298,2655,2541],{"class":308},[298,2657,2658],{"class":308}," :",[298,2660,2661],{"class":419}," _signInWithEmail",[298,2663,501],{"class":308},[298,2665,2667,2670,2672],{"class":300,"line":2666},88,[298,2668,2669],{"class":419},"                child",[298,2671,318],{"class":308},[298,2673,2674],{"class":419}," _loading\n",[298,2676,2678,2681,2683,2685,2687,2690],{"class":300,"line":2677},89,[298,2679,2680],{"class":308},"                    ?",[298,2682,955],{"class":423},[298,2684,2318],{"class":415},[298,2686,278],{"class":308},[298,2688,2689],{"class":430},"square",[298,2691,487],{"class":419},[298,2693,2695,2698,2700,2703],{"class":300,"line":2694},90,[298,2696,2697],{"class":419},"                        dimension",[298,2699,318],{"class":308},[298,2701,2702],{"class":363}," 20",[298,2704,501],{"class":308},[298,2706,2708,2711,2713,2716,2719,2721,2724,2726],{"class":300,"line":2707},91,[298,2709,2710],{"class":419},"                        child",[298,2712,318],{"class":308},[298,2714,2715],{"class":415}," CircularProgressIndicator",[298,2717,2718],{"class":419},"(strokeWidth",[298,2720,318],{"class":308},[298,2722,2723],{"class":363}," 2",[298,2725,969],{"class":419},[298,2727,501],{"class":308},[298,2729,2731],{"class":300,"line":2730},92,[298,2732,2733],{"class":419},"                      )\n",[298,2735,2737,2740,2742,2744,2746,2749,2751],{"class":300,"line":2736},93,[298,2738,2739],{"class":308},"                    :",[298,2741,955],{"class":423},[298,2743,2267],{"class":415},[298,2745,583],{"class":419},[298,2747,2748],{"class":321},"'Continue with email'",[298,2750,969],{"class":419},[298,2752,501],{"class":308},[298,2754,2756,2758],{"class":300,"line":2755},94,[298,2757,2426],{"class":419},[298,2759,501],{"class":308},[298,2761,2763,2765,2767,2769,2771,2773,2775],{"class":300,"line":2762},95,[298,2764,2264],{"class":423},[298,2766,2318],{"class":415},[298,2768,2321],{"class":419},[298,2770,318],{"class":308},[298,2772,2442],{"class":363},[298,2774,969],{"class":419},[298,2776,501],{"class":308},[298,2778,2780,2783,2785,2788],{"class":300,"line":2779},96,[298,2781,2782],{"class":415},"              OutlinedButton",[298,2784,278],{"class":308},[298,2786,2787],{"class":430},"icon",[298,2789,487],{"class":419},[298,2791,2793,2795,2797,2799,2801,2803,2805,2808],{"class":300,"line":2792},97,[298,2794,2646],{"class":419},[298,2796,318],{"class":308},[298,2798,2651],{"class":419},[298,2800,1682],{"class":308},[298,2802,2541],{"class":308},[298,2804,2658],{"class":308},[298,2806,2807],{"class":419}," _signInWithGoogle",[298,2809,501],{"class":308},[298,2811,2813,2816,2818,2820,2823,2825,2828,2830,2833],{"class":300,"line":2812},98,[298,2814,2815],{"class":419},"                icon",[298,2817,318],{"class":308},[298,2819,955],{"class":423},[298,2821,2822],{"class":415}," Icon",[298,2824,583],{"class":419},[298,2826,2827],{"class":415},"Icons",[298,2829,278],{"class":308},[298,2831,2832],{"class":419},"g_mobiledata)",[298,2834,501],{"class":308},[298,2836,2838,2841,2843,2845,2847,2849,2852,2854],{"class":300,"line":2837},99,[298,2839,2840],{"class":419},"                label",[298,2842,318],{"class":308},[298,2844,955],{"class":423},[298,2846,2267],{"class":415},[298,2848,583],{"class":419},[298,2850,2851],{"class":321},"'Continue with Google'",[298,2853,969],{"class":419},[298,2855,501],{"class":308},[298,2857,2859,2861],{"class":300,"line":2858},100,[298,2860,2426],{"class":419},[298,2862,501],{"class":308},[298,2864,2866,2869],{"class":300,"line":2865},101,[298,2867,2868],{"class":419},"            ]",[298,2870,501],{"class":308},[298,2872,2874,2877],{"class":300,"line":2873},102,[298,2875,2876],{"class":419},"          )",[298,2878,501],{"class":308},[298,2880,2882,2884],{"class":300,"line":2881},103,[298,2883,911],{"class":419},[298,2885,501],{"class":308},[298,2887,2889,2892],{"class":300,"line":2888},104,[298,2890,2891],{"class":419},"      )",[298,2893,501],{"class":308},[298,2895,2897,2899],{"class":300,"line":2896},105,[298,2898,977],{"class":419},[298,2900,370],{"class":308},[298,2902,2904],{"class":300,"line":2903},106,[298,2905,1113],{"class":419},[298,2907,2909],{"class":300,"line":2908},107,[298,2910,1016],{"class":419},[280,2912],{},[283,2914,2916],{"id":2915},"home-page","Home page",[288,2918,2921],{"className":353,"code":2919,"filename":2920,"language":356,"meta":294,"style":294},"import 'package:authyra_flutter/authyra_flutter.dart';\nimport 'package:flutter/material.dart';\n\nclass HomePage extends StatelessWidget {\n  const HomePage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    // currentUser is synchronous — safe in build()\n    final user = Authyra.instance.currentUser!;\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Hello, ${user.name ?? user.email ?? 'there'}!'),\n        actions: [\n          IconButton(\n            icon: const Icon(Icons.logout),\n            tooltip: 'Sign out',\n            onPressed: () => Authyra.instance.signOut(),\n          ),\n        ],\n      ),\n      body: Padding(\n        padding: const EdgeInsets.all(24),\n        child: Column(\n          crossAxisAlignment: CrossAxisAlignment.start,\n          children: [\n            if (user.avatarUrl != null)\n              CircleAvatar(\n                radius: 36,\n                backgroundImage: NetworkImage(user.avatarUrl!),\n              ),\n            const SizedBox(height: 16),\n            Text('ID: ${user.id}'),\n            if (user.email != null) Text('Email: ${user.email}'),\n          ],\n        ),\n      ),\n    );\n  }\n}\n","lib/pages/home_page.dart",[275,2922,2923,2931,2939,2943,2955,2969,2973,2977,2989,2994,3017,3021,3029,3041,3091,3100,3107,3129,3141,3168,3174,3181,3187,3197,3220,3230,3246,3255,3274,3281,3293,3317,3323,3341,3368,3409,3416,3422,3428,3434,3438],{"__ignoreMap":294},[298,2924,2925,2927,2929],{"class":300,"line":301},[298,2926,364],{"class":363},[298,2928,377],{"class":321},[298,2930,370],{"class":308},[298,2932,2933,2935,2937],{"class":300,"line":312},[298,2934,364],{"class":363},[298,2936,386],{"class":321},[298,2938,370],{"class":308},[298,2940,2941],{"class":300,"line":325},[298,2942,394],{"emptyLinePlaceholder":393},[298,2944,2945,2947,2949,2951,2953],{"class":300,"line":336},[298,2946,1027],{"class":308},[298,2948,1494],{"class":415},[298,2950,1032],{"class":308},[298,2952,1035],{"class":415},[298,2954,441],{"class":419},[298,2956,2957,2959,2961,2963,2965,2967],{"class":300,"line":397},[298,2958,1043],{"class":423},[298,2960,1494],{"class":415},[298,2962,1048],{"class":419},[298,2964,278],{"class":308},[298,2966,1053],{"class":419},[298,2968,370],{"class":308},[298,2970,2971],{"class":300,"line":407},[298,2972,394],{"emptyLinePlaceholder":393},[298,2974,2975],{"class":300,"line":412},[298,2976,1066],{"class":423},[298,2978,2979,2981,2983,2985,2987],{"class":300,"line":444},[298,2980,1072],{"class":415},[298,2982,1075],{"class":430},[298,2984,583],{"class":419},[298,2986,1080],{"class":415},[298,2988,1083],{"class":419},[298,2990,2991],{"class":300,"line":460},[298,2992,2993],{"class":468},"    // currentUser is synchronous — safe in build()\n",[298,2995,2996,2998,3001,3003,3005,3007,3009,3011,3014],{"class":300,"line":465},[298,2997,1304],{"class":423},[298,2999,3000],{"class":419}," user ",[298,3002,481],{"class":308},[298,3004,613],{"class":415},[298,3006,278],{"class":308},[298,3008,1277],{"class":419},[298,3010,278],{"class":308},[298,3012,3013],{"class":419},"currentUser",[298,3015,3016],{"class":308},"!;\n",[298,3018,3019],{"class":300,"line":472},[298,3020,394],{"emptyLinePlaceholder":393},[298,3022,3023,3025,3027],{"class":300,"line":490},[298,3024,1089],{"class":437},[298,3026,2149],{"class":415},[298,3028,487],{"class":419},[298,3030,3031,3034,3036,3039],{"class":300,"line":504},[298,3032,3033],{"class":419},"      appBar",[298,3035,318],{"class":308},[298,3037,3038],{"class":415}," AppBar",[298,3040,487],{"class":419},[298,3042,3043,3046,3048,3050,3052,3055,3058,3061,3063,3066,3069,3071,3073,3076,3078,3081,3084,3087,3089],{"class":300,"line":510},[298,3044,3045],{"class":419},"        title",[298,3047,318],{"class":308},[298,3049,2267],{"class":415},[298,3051,583],{"class":419},[298,3053,3054],{"class":321},"'Hello, ",[298,3056,3057],{"class":419},"${",[298,3059,3060],{"class":2004},"user",[298,3062,278],{"class":419},[298,3064,3065],{"class":2004},"name",[298,3067,3068],{"class":419}," ?? ",[298,3070,3060],{"class":2004},[298,3072,278],{"class":419},[298,3074,3075],{"class":2004},"email",[298,3077,3068],{"class":419},[298,3079,3080],{"class":321},"'there'",[298,3082,3083],{"class":419},"}",[298,3085,3086],{"class":321},"!'",[298,3088,969],{"class":419},[298,3090,501],{"class":308},[298,3092,3093,3096,3098],{"class":300,"line":518},[298,3094,3095],{"class":419},"        actions",[298,3097,318],{"class":308},[298,3099,644],{"class":419},[298,3101,3102,3105],{"class":300,"line":523},[298,3103,3104],{"class":415},"          IconButton",[298,3106,487],{"class":419},[298,3108,3109,3112,3114,3116,3118,3120,3122,3124,3127],{"class":300,"line":529},[298,3110,3111],{"class":419},"            icon",[298,3113,318],{"class":308},[298,3115,955],{"class":423},[298,3117,2822],{"class":415},[298,3119,583],{"class":419},[298,3121,2827],{"class":415},[298,3123,278],{"class":308},[298,3125,3126],{"class":419},"logout)",[298,3128,501],{"class":308},[298,3130,3131,3134,3136,3139],{"class":300,"line":542},[298,3132,3133],{"class":419},"            tooltip",[298,3135,318],{"class":308},[298,3137,3138],{"class":321}," 'Sign out'",[298,3140,501],{"class":308},[298,3142,3143,3146,3148,3151,3153,3155,3157,3159,3161,3164,3166],{"class":300,"line":550},[298,3144,3145],{"class":419},"            onPressed",[298,3147,318],{"class":308},[298,3149,3150],{"class":419}," () ",[298,3152,1224],{"class":308},[298,3154,613],{"class":415},[298,3156,278],{"class":308},[298,3158,1277],{"class":419},[298,3160,278],{"class":308},[298,3162,3163],{"class":430},"signOut",[298,3165,455],{"class":419},[298,3167,501],{"class":308},[298,3169,3170,3172],{"class":300,"line":558},[298,3171,2876],{"class":419},[298,3173,501],{"class":308},[298,3175,3176,3179],{"class":300,"line":565},[298,3177,3178],{"class":419},"        ]",[298,3180,501],{"class":308},[298,3182,3183,3185],{"class":300,"line":596},[298,3184,2891],{"class":419},[298,3186,501],{"class":308},[298,3188,3189,3191,3193,3195],{"class":300,"line":601},[298,3190,2156],{"class":419},[298,3192,318],{"class":308},[298,3194,2173],{"class":415},[298,3196,487],{"class":419},[298,3198,3199,3202,3204,3206,3208,3210,3212,3214,3216,3218],{"class":300,"line":607},[298,3200,3201],{"class":419},"        padding",[298,3203,318],{"class":308},[298,3205,955],{"class":423},[298,3207,2187],{"class":415},[298,3209,278],{"class":308},[298,3211,2192],{"class":430},[298,3213,583],{"class":419},[298,3215,2197],{"class":363},[298,3217,969],{"class":419},[298,3219,501],{"class":308},[298,3221,3222,3224,3226,3228],{"class":300,"line":623},[298,3223,2168],{"class":419},[298,3225,318],{"class":308},[298,3227,2211],{"class":415},[298,3229,487],{"class":419},[298,3231,3232,3235,3237,3239,3241,3244],{"class":300,"line":636},[298,3233,3234],{"class":419},"          crossAxisAlignment",[298,3236,318],{"class":308},[298,3238,2241],{"class":415},[298,3240,278],{"class":308},[298,3242,3243],{"class":419},"start",[298,3245,501],{"class":308},[298,3247,3248,3251,3253],{"class":300,"line":647},[298,3249,3250],{"class":419},"          children",[298,3252,318],{"class":308},[298,3254,644],{"class":419},[298,3256,3257,3259,3262,3264,3267,3269,3271],{"class":300,"line":660},[298,3258,731],{"class":437},[298,3260,3261],{"class":419}," (user",[298,3263,278],{"class":308},[298,3265,3266],{"class":419},"avatarUrl ",[298,3268,742],{"class":308},[298,3270,2541],{"class":308},[298,3272,3273],{"class":419},")\n",[298,3275,3276,3279],{"class":300,"line":673},[298,3277,3278],{"class":415},"              CircleAvatar",[298,3280,487],{"class":419},[298,3282,3283,3286,3288,3291],{"class":300,"line":688},[298,3284,3285],{"class":419},"                radius",[298,3287,318],{"class":308},[298,3289,3290],{"class":363}," 36",[298,3292,501],{"class":308},[298,3294,3295,3298,3300,3303,3306,3308,3311,3313,3315],{"class":300,"line":728},[298,3296,3297],{"class":419},"                backgroundImage",[298,3299,318],{"class":308},[298,3301,3302],{"class":415}," NetworkImage",[298,3304,3305],{"class":419},"(user",[298,3307,278],{"class":308},[298,3309,3310],{"class":419},"avatarUrl",[298,3312,1367],{"class":308},[298,3314,969],{"class":419},[298,3316,501],{"class":308},[298,3318,3319,3321],{"class":300,"line":757},[298,3320,2426],{"class":419},[298,3322,501],{"class":308},[298,3324,3325,3328,3330,3332,3334,3337,3339],{"class":300,"line":768},[298,3326,3327],{"class":423},"            const",[298,3329,2318],{"class":415},[298,3331,2321],{"class":419},[298,3333,318],{"class":308},[298,3335,3336],{"class":363}," 16",[298,3338,969],{"class":419},[298,3340,501],{"class":308},[298,3342,3343,3346,3348,3351,3353,3355,3357,3360,3362,3364,3366],{"class":300,"line":819},[298,3344,3345],{"class":415},"            Text",[298,3347,583],{"class":419},[298,3349,3350],{"class":321},"'ID: ",[298,3352,3057],{"class":419},[298,3354,3060],{"class":2004},[298,3356,278],{"class":419},[298,3358,3359],{"class":2004},"id",[298,3361,3083],{"class":419},[298,3363,2008],{"class":321},[298,3365,969],{"class":419},[298,3367,501],{"class":308},[298,3369,3370,3372,3374,3376,3379,3381,3383,3385,3388,3390,3393,3395,3397,3399,3401,3403,3405,3407],{"class":300,"line":841},[298,3371,731],{"class":437},[298,3373,3261],{"class":419},[298,3375,278],{"class":308},[298,3377,3378],{"class":419},"email ",[298,3380,742],{"class":308},[298,3382,2541],{"class":308},[298,3384,748],{"class":419},[298,3386,3387],{"class":415},"Text",[298,3389,583],{"class":419},[298,3391,3392],{"class":321},"'Email: ",[298,3394,3057],{"class":419},[298,3396,3060],{"class":2004},[298,3398,278],{"class":419},[298,3400,3075],{"class":2004},[298,3402,3083],{"class":419},[298,3404,2008],{"class":321},[298,3406,969],{"class":419},[298,3408,501],{"class":308},[298,3410,3411,3414],{"class":300,"line":862},[298,3412,3413],{"class":419},"          ]",[298,3415,501],{"class":308},[298,3417,3418,3420],{"class":300,"line":892},[298,3419,911],{"class":419},[298,3421,501],{"class":308},[298,3423,3424,3426],{"class":300,"line":900},[298,3425,2891],{"class":419},[298,3427,501],{"class":308},[298,3429,3430,3432],{"class":300,"line":908},[298,3431,977],{"class":419},[298,3433,370],{"class":308},[298,3435,3436],{"class":300,"line":916},[298,3437,1113],{"class":419},[298,3439,3440],{"class":300,"line":924},[298,3441,1016],{"class":419},[280,3443],{},[283,3445,3447],{"id":3446},"what-this-demonstrates","What this demonstrates",[3449,3450,3451,3464],"table",{},[3452,3453,3454],"thead",{},[3455,3456,3457,3461],"tr",{},[3458,3459,3460],"th",{},"Feature",[3458,3462,3463],{},"Where",[3465,3466,3467,3482,3497,3507,3523,3536],"tbody",{},[3455,3468,3469,3473],{},[3470,3471,3472],"td",{},"Email/password with JWT tokens",[3470,3474,3475,3478,3479],{},[275,3476,3477],{},"CredentialsProvider.withTokens"," in ",[275,3480,3481],{},"main.dart",[3455,3483,3484,3487],{},[3470,3485,3486],{},"Google OAuth2 with PKCE",[3470,3488,3489,3492,3493,3478,3495],{},[275,3490,3491],{},"GoogleProvider"," + ",[275,3494,586],{},[275,3496,3481],{},[3455,3498,3499,3502],{},[3470,3500,3501],{},"Encrypted session storage",[3470,3503,3504],{},[275,3505,3506],{},"SecureAuthStorage",[3455,3508,3509,3512],{},[3470,3510,3511],{},"GoRouter reactive redirect",[3470,3513,3514,3492,3517,3478,3520],{},[275,3515,3516],{},"refreshListenable",[275,3518,3519],{},"redirect",[275,3521,3522],{},"router.dart",[3455,3524,3525,3528],{},[3470,3526,3527],{},"Error handling per provider",[3470,3529,3530,3478,3533],{},[275,3531,3532],{},"on AuthenticationFailedException",[275,3534,3535],{},"login_page.dart",[3455,3537,3538,3544],{},[3470,3539,3540,3541],{},"Synchronous state in ",[275,3542,3543],{},"build()",[3470,3545,3546,3478,3549],{},[275,3547,3548],{},"Authyra.instance.currentUser",[275,3550,3551],{},"home_page.dart",[280,3553],{},[283,3555,3557],{"id":3556},"next-steps","Next steps",[3559,3560,3561,3569,3575,3581],"ul",{},[3562,3563,3564,3568],"li",{},[3565,3566,3567],"a",{"href":171},"Flutter Setup →"," — deep-link wiring details",[3562,3570,3571,3574],{},[3565,3572,3573],{"href":103},"Google Provider →"," — scopes, redirect URI, token rotation",[3562,3576,3577,3580],{},[3565,3578,3579],{"href":143},"Multi-Account →"," — account switching",[3562,3582,3583,3586],{},[3565,3584,3585],{"href":148},"Route Protection →"," — guard patterns",[3588,3589,3590],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":294,"searchDepth":312,"depth":312,"links":3592},[3593,3594,3595,3596,3597,3598,3599],{"id":285,"depth":312,"text":286},{"id":349,"depth":312,"text":350},{"id":1097,"depth":312,"text":1123},{"id":1516,"depth":312,"text":1517},{"id":2915,"depth":312,"text":2916},{"id":3446,"depth":312,"text":3447},{"id":3556,"depth":312,"text":3557},"A complete Flutter app with email/password and Google Sign-In using authyra_flutter.","md",null,{},{"title":3605,"description":3606},"Flutter App Example | Authyra","Full working example of a Flutter app with email/password login and Google OAuth2 using authyra_flutter.","HNwiqMRFvR1XywbBWWWgeL7qSgmtvrPblJdgpytZJZk",[3609,3611],{"title":231,"path":232,"stem":233,"description":3610,"icon":234,"children":-1},"Hiérarchie complète des exceptions Authyra — codes, catégories et gestion dans le code applicatif.",{"title":245,"path":246,"stem":247,"description":3612,"icon":248,"children":-1},"Utiliser authyra core dans un serveur Shelf ou Dart Frog — authentification backend sans Flutter.",1782700513962]