[{"data":1,"prerenderedAt":2702},["ShallowReactive",2],{"navigation_docs":3,"-sdks-mobile-flutter":123,"-sdks-mobile-flutter-surround":2094,"sdks\u002Fflutter\u002Finstall":2097,"sdks\u002Fflutter\u002Fconfigure":2163,"sdks\u002Fflutter\u002Fsimple-usage":2239,"sdks\u002Fflutter\u002Fuser-context":2421},[4,30,113],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":16,"path":17,"stem":18,"icon":19},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":21,"path":22,"stem":23,"icon":24},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":26,"path":27,"stem":28,"icon":29},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":31,"defaultOpen":32,"path":33,"stem":34,"children":35,"page":6},"SDKs",true,"\u002Fsdks","2.sdks",[36,41,67,82,98],{"title":37,"path":38,"stem":39,"icon":40},"Available SDKs","\u002Fsdks\u002Favailable-sdks","2.sdks\u002F1.available-sdks","i-lucide-list",{"title":42,"icon":43,"defaultOpen":32,"path":44,"stem":45,"children":46,"page":6},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","2.sdks\u002F2.browser",[47,52,57,62],{"title":48,"path":49,"stem":50,"icon":51},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","2.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":53,"path":54,"stem":55,"icon":56},"React","\u002Fsdks\u002Fbrowser\u002Freact","2.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":58,"path":59,"stem":60,"icon":61},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","2.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":63,"path":64,"stem":65,"icon":66},"OpenFeature Web","\u002Fsdks\u002Fbrowser\u002Fopenfeature-web","2.sdks\u002F2.browser\u002F4.openfeature-web","cd-logos-openfeature",{"title":68,"icon":69,"defaultOpen":32,"path":70,"stem":71,"children":72,"page":6},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","2.sdks\u002F3.mobile",[73,77],{"title":74,"path":75,"stem":76,"icon":56},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","2.sdks\u002F3.mobile\u002F1.react-native",{"title":78,"path":79,"stem":80,"icon":81},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","2.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":83,"icon":84,"defaultOpen":32,"path":85,"stem":86,"children":87,"page":6},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","2.sdks\u002F4.meta",[88,93],{"title":89,"path":90,"stem":91,"icon":92},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","2.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":94,"path":95,"stem":96,"icon":97},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","2.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":99,"icon":100,"defaultOpen":32,"path":101,"stem":102,"children":103,"page":6},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","2.sdks\u002F5.server",[104,109],{"title":105,"path":106,"stem":107,"icon":108},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","2.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":110,"path":111,"stem":112,"icon":66},"OpenFeature Node.js","\u002Fsdks\u002Fserver\u002Fopenfeature-node","2.sdks\u002F5.server\u002F2.openfeature-node",{"title":114,"defaultOpen":32,"path":115,"stem":116,"children":117,"page":6},"Integrations","\u002Fintegrations","3.integrations",[118],{"title":119,"path":120,"stem":121,"icon":122},"Terraform","\u002Fintegrations\u002Fterraform","3.integrations\u002F1.terraform","cd-logos-terraform",{"id":124,"title":125,"body":126,"description":218,"extension":2088,"links":2089,"meta":2090,"navigation":2091,"path":79,"seo":2092,"stem":80,"__hash__":2093},"docs\u002F2.sdks\u002F3.mobile\u002F2.flutter.md","Flutter SDK",{"type":127,"value":128,"toc":2069},"minimark",[129,133,139,144,148,160,163,167,175,179,183,197,200,204,211,559,574,579,585,591,597,608,711,716,726,729,803,806,1075,1080,1086,1217,1325,1329,1336,1399,1402,1617,1621,1627,1640,1643,1666,1788,1798,1900,1916,1920,1923,1934,1938,1941,1945,1960,1966,1993,1999,2015,2021,2027,2034,2046,2055,2059,2065],[130,131],"div",{"hidden":32,"dataTitleIcon":132},"flutter",[134,135],"external-badges",{"package-url":136,"registry":137,"repo":138},"https:\u002F\u002Fpub.dev\u002Fpackages\u002Fconfigdirector_flutter_client_sdk","pub.dev","flutter-client-sdk",[140,141,143],"h2",{"id":142},"introduction","Introduction",[145,146,147],"p",{},"The Flutter SDK is intended to be used by Flutter applications on any of the platforms Flutter targets: iOS, Android, web, macOS, Windows, and Linux.",[145,149,150,151,155,156,159],{},"The minimum supported version of Flutter is ",[152,153,154],"code",{},"3.22",", and the minimum supported version of Dart is ",[152,157,158],{},"3.4",".",[145,161,162],{},"Telemetry collection runs on a background isolate, so preparing and sending telemetry stays off your application's main isolate. The web has no isolates and a package cannot ship a web worker of its own, so on web the reports are prepared on the main thread instead; they are still built one batch per flush interval rather than while a config is being evaluated.",[140,164,166],{"id":165},"installation","Installation",[145,168,169,170],{},"The SDK can be installed from pub.dev: ",[171,172,136],"a",{"href":136,"rel":173},[174],"nofollow",[176,177],"content-partial",{"name":178},"sdks\u002Fflutter\u002Finstall",[140,180,182],{"id":181},"configure-and-initialize-the-client","Configure and initialize the client",[184,185,186,194],"ol",{},[187,188,189,190,193],"li",{},"Create an instance of the client providing your client SDK key. You can retrieve a client SDK key under your project settings in the ",[152,191,192],{},"Environments & SDK Keys"," tab.",[187,195,196],{},"Initialize the client to initiate its connection lifecycle.",[176,198],{"name":199},"sdks\u002Fflutter\u002Fconfigure",[201,202,203],"note",{},"Before the client is initialized, config values will evaluate to the default value provided in code.",[145,205,206,207,210],{},"Most applications create a single client instance, initialize it during startup, and dispose of it on shutdown. In a Flutter app that usually means owning it in a ",[152,208,209],{},"State",":",[212,213,219],"pre",{"className":214,"code":215,"filename":216,"language":217,"meta":218,"style":218},"language-dart shiki shiki-themes material-theme-lighter github-light github-dark","class MyApp extends StatefulWidget {\n  const MyApp({super.key});\n\n  @override\n  State\u003CMyApp> createState() => _MyAppState();\n}\n\nclass _MyAppState extends State\u003CMyApp> {\n  late final ConfigDirectorClient _client;\n\n  @override\n  void initState() {\n    super.initState();\n    _client = ConfigDirectorClient(clientSdkKey: 'YOUR-CLIENT-SDK-KEY');\n\n    unawaited(_client.initialize());\n  }\n\n  @override\n  void dispose() {\n    _client.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) => MaterialApp(home: const HomePage());\n}\n","app.dart","dart","",[152,220,221,244,269,275,281,314,320,325,344,361,366,371,383,398,423,428,447,453,458,463,473,488,501,506,511,516,554],{"__ignoreMap":218},[222,223,226,230,234,237,240],"span",{"class":224,"line":225},"line",1,[222,227,229],{"class":228},"smGrS","class",[222,231,233],{"class":232},"sZMiF"," MyApp",[222,235,236],{"class":228}," extends",[222,238,239],{"class":232}," StatefulWidget",[222,241,243],{"class":242},"su5hD"," {\n",[222,245,247,251,253,256,260,263,266],{"class":224,"line":246},2,[222,248,250],{"class":249},"sbsja","  const",[222,252,233],{"class":232},[222,254,255],{"class":242},"({",[222,257,259],{"class":258},"s_hVV","super",[222,261,159],{"class":262},"sP7_E",[222,264,265],{"class":242},"key})",[222,267,268],{"class":262},";\n",[222,270,272],{"class":224,"line":271},3,[222,273,274],{"emptyLinePlaceholder":32},"\n",[222,276,278],{"class":224,"line":277},4,[222,279,280],{"class":249},"  @override\n",[222,282,284,287,290,293,296,300,303,306,309,312],{"class":224,"line":283},5,[222,285,286],{"class":232},"  State",[222,288,289],{"class":242},"\u003C",[222,291,292],{"class":232},"MyApp",[222,294,295],{"class":242},"> ",[222,297,299],{"class":298},"sGLFI","createState",[222,301,302],{"class":242},"() ",[222,304,305],{"class":228},"=>",[222,307,308],{"class":232}," _MyAppState",[222,310,311],{"class":242},"()",[222,313,268],{"class":262},[222,315,317],{"class":224,"line":316},6,[222,318,319],{"class":242},"}\n",[222,321,323],{"class":224,"line":322},7,[222,324,274],{"emptyLinePlaceholder":32},[222,326,328,330,332,334,337,339,341],{"class":224,"line":327},8,[222,329,229],{"class":228},[222,331,308],{"class":232},[222,333,236],{"class":228},[222,335,336],{"class":232}," State",[222,338,289],{"class":242},[222,340,292],{"class":232},[222,342,343],{"class":242},"> {\n",[222,345,347,350,353,356,359],{"class":224,"line":346},9,[222,348,349],{"class":249},"  late",[222,351,352],{"class":249}," final",[222,354,355],{"class":232}," ConfigDirectorClient",[222,357,358],{"class":242}," _client",[222,360,268],{"class":262},[222,362,364],{"class":224,"line":363},10,[222,365,274],{"emptyLinePlaceholder":32},[222,367,369],{"class":224,"line":368},11,[222,370,280],{"class":249},[222,372,374,377,380],{"class":224,"line":373},12,[222,375,376],{"class":249},"  void",[222,378,379],{"class":298}," initState",[222,381,382],{"class":242},"() {\n",[222,384,386,389,391,394,396],{"class":224,"line":385},13,[222,387,388],{"class":258},"    super",[222,390,159],{"class":262},[222,392,393],{"class":298},"initState",[222,395,311],{"class":242},[222,397,268],{"class":262},[222,399,401,404,407,409,412,414,418,421],{"class":224,"line":400},14,[222,402,403],{"class":242},"    _client ",[222,405,406],{"class":228},"=",[222,408,355],{"class":232},[222,410,411],{"class":242},"(clientSdkKey",[222,413,210],{"class":228},[222,415,417],{"class":416},"s_sjI"," 'YOUR-CLIENT-SDK-KEY'",[222,419,420],{"class":242},")",[222,422,268],{"class":262},[222,424,426],{"class":224,"line":425},15,[222,427,274],{"emptyLinePlaceholder":32},[222,429,431,434,437,439,442,445],{"class":224,"line":430},16,[222,432,433],{"class":298},"    unawaited",[222,435,436],{"class":242},"(_client",[222,438,159],{"class":262},[222,440,441],{"class":298},"initialize",[222,443,444],{"class":242},"())",[222,446,268],{"class":262},[222,448,450],{"class":224,"line":449},17,[222,451,452],{"class":242},"  }\n",[222,454,456],{"class":224,"line":455},18,[222,457,274],{"emptyLinePlaceholder":32},[222,459,461],{"class":224,"line":460},19,[222,462,280],{"class":249},[222,464,466,468,471],{"class":224,"line":465},20,[222,467,376],{"class":249},[222,469,470],{"class":298}," dispose",[222,472,382],{"class":242},[222,474,476,479,481,484,486],{"class":224,"line":475},21,[222,477,478],{"class":242},"    _client",[222,480,159],{"class":262},[222,482,483],{"class":298},"dispose",[222,485,311],{"class":242},[222,487,268],{"class":262},[222,489,491,493,495,497,499],{"class":224,"line":490},22,[222,492,388],{"class":258},[222,494,159],{"class":262},[222,496,483],{"class":298},[222,498,311],{"class":242},[222,500,268],{"class":262},[222,502,504],{"class":224,"line":503},23,[222,505,452],{"class":242},[222,507,509],{"class":224,"line":508},24,[222,510,274],{"emptyLinePlaceholder":32},[222,512,514],{"class":224,"line":513},25,[222,515,280],{"class":249},[222,517,519,522,525,528,531,534,536,539,542,544,547,550,552],{"class":224,"line":518},26,[222,520,521],{"class":232},"  Widget",[222,523,524],{"class":298}," build",[222,526,527],{"class":242},"(",[222,529,530],{"class":232},"BuildContext",[222,532,533],{"class":242}," context) ",[222,535,305],{"class":228},[222,537,538],{"class":232}," MaterialApp",[222,540,541],{"class":242},"(home",[222,543,210],{"class":228},[222,545,546],{"class":249}," const",[222,548,549],{"class":232}," HomePage",[222,551,444],{"class":242},[222,553,268],{"class":262},[222,555,557],{"class":224,"line":556},27,[222,558,319],{"class":242},[201,560,561,562,565,566,569,570,573],{},"The SDK follows the app lifecycle through ",[152,563,564],{},"WidgetsBinding"," so it can release its network connection while the app is backgrounded. If you create the client before ",[152,567,568],{},"runApp",", call ",[152,571,572],{},"WidgetsFlutterBinding.ensureInitialized()"," first. Without it the client still works, but the connection is not paused automatically and the SDK logs a warning.",[575,576,578],"h3",{"id":577},"additional-configuration-options","Additional configuration options",[145,580,581,582,159],{},"These options can be passed in to ",[152,583,584],{},"ConfigDirectorClientOptions",[586,587,589],"h4",{"id":588},"metadata",[152,590,588],{},[145,592,593,594,596],{},"The ",[152,595,588],{}," option allows you to provide your application's name and version. These values can be used in targeting rules conditionals. For example, if a certain feature should only be enabled starting with a certain version of your application.",[145,598,599,600,603,604,607],{},"Whichever of the two you leave unset is read from the platform — the application label and ",[152,601,602],{},"versionName"," on Android, the bundle display name and short version string on iOS and macOS, and ",[152,605,606],{},"version.json"," on web — so most applications do not need to set either one.",[212,609,612],{"className":214,"code":610,"filename":611,"language":217,"meta":218,"style":218},"final client = ConfigDirectorClient(\n  clientSdkKey: 'YOUR-CLIENT-SDK-KEY',\n  options: const ConfigDirectorClientOptions(\n    metadata: ConfigDirectorMetaContext(\n      appName: 'YOUR-APP-NAME',\n      appVersion: '1.0.2',\n    ),\n  ),\n);\n","config_director_setup.dart",[152,613,614,629,641,655,667,679,691,698,705],{"__ignoreMap":218},[222,615,616,619,622,624,626],{"class":224,"line":225},[222,617,618],{"class":249},"final",[222,620,621],{"class":242}," client ",[222,623,406],{"class":228},[222,625,355],{"class":232},[222,627,628],{"class":242},"(\n",[222,630,631,634,636,638],{"class":224,"line":246},[222,632,633],{"class":242},"  clientSdkKey",[222,635,210],{"class":228},[222,637,417],{"class":416},[222,639,640],{"class":262},",\n",[222,642,643,646,648,650,653],{"class":224,"line":271},[222,644,645],{"class":242},"  options",[222,647,210],{"class":228},[222,649,546],{"class":249},[222,651,652],{"class":232}," ConfigDirectorClientOptions",[222,654,628],{"class":242},[222,656,657,660,662,665],{"class":224,"line":277},[222,658,659],{"class":242},"    metadata",[222,661,210],{"class":228},[222,663,664],{"class":232}," ConfigDirectorMetaContext",[222,666,628],{"class":242},[222,668,669,672,674,677],{"class":224,"line":283},[222,670,671],{"class":242},"      appName",[222,673,210],{"class":228},[222,675,676],{"class":416}," 'YOUR-APP-NAME'",[222,678,640],{"class":262},[222,680,681,684,686,689],{"class":224,"line":316},[222,682,683],{"class":242},"      appVersion",[222,685,210],{"class":228},[222,687,688],{"class":416}," '1.0.2'",[222,690,640],{"class":262},[222,692,693,696],{"class":224,"line":322},[222,694,695],{"class":242},"    )",[222,697,640],{"class":262},[222,699,700,703],{"class":224,"line":327},[222,701,702],{"class":242},"  )",[222,704,640],{"class":262},[222,706,707,709],{"class":224,"line":346},[222,708,420],{"class":242},[222,710,268],{"class":262},[586,712,714],{"id":713},"logger",[152,715,713],{},[145,717,718,719,721,722,725],{},"By default, the SDK logs to the console and it is set to log warnings and errors only. You can configure a ",[152,720,713],{}," by either creating a ConfigDirector console logger with a different log level, or by implementing the ",[152,723,724],{},"ConfigDirectorLogger"," interface to provide your own logger. The interface can be used to create an adapter to another logging library.",[145,727,728],{},"Configure the ConfigDirector console logger to a different level:",[212,730,732],{"className":214,"code":731,"filename":611,"language":217,"meta":218,"style":218},"final client = ConfigDirectorClient(\n  clientSdkKey: 'YOUR-CLIENT-SDK-KEY',\n  options: ConfigDirectorClientOptions(\n    logger: ConsoleLogger(level: ConfigDirectorLogLevel.debug),\n  ),\n);\n",[152,733,734,746,756,766,791,797],{"__ignoreMap":218},[222,735,736,738,740,742,744],{"class":224,"line":225},[222,737,618],{"class":249},[222,739,621],{"class":242},[222,741,406],{"class":228},[222,743,355],{"class":232},[222,745,628],{"class":242},[222,747,748,750,752,754],{"class":224,"line":246},[222,749,633],{"class":242},[222,751,210],{"class":228},[222,753,417],{"class":416},[222,755,640],{"class":262},[222,757,758,760,762,764],{"class":224,"line":271},[222,759,645],{"class":242},[222,761,210],{"class":228},[222,763,652],{"class":232},[222,765,628],{"class":242},[222,767,768,771,773,776,779,781,784,786,789],{"class":224,"line":277},[222,769,770],{"class":242},"    logger",[222,772,210],{"class":228},[222,774,775],{"class":232}," ConsoleLogger",[222,777,778],{"class":242},"(level",[222,780,210],{"class":228},[222,782,783],{"class":232}," ConfigDirectorLogLevel",[222,785,159],{"class":262},[222,787,788],{"class":242},"debug)",[222,790,640],{"class":262},[222,792,793,795],{"class":224,"line":283},[222,794,702],{"class":242},[222,796,640],{"class":262},[222,798,799,801],{"class":224,"line":316},[222,800,420],{"class":242},[222,802,268],{"class":262},[145,804,805],{},"Implement your own logger adapter:",[212,807,809],{"className":214,"code":808,"filename":611,"language":217,"meta":218,"style":218},"class MyLogger implements ConfigDirectorLogger {\n  @override\n  void debug(String message, [Object? error, StackTrace? stackTrace]) {\n    \u002F\u002F your specific logging library implementation here\n  }\n\n  @override\n  void info(String message, [Object? error, StackTrace? stackTrace]) {\n    \u002F\u002F your specific logging library implementation here\n  }\n\n  @override\n  void warn(String message, [Object? error, StackTrace? stackTrace]) {\n    \u002F\u002F your specific logging library implementation here\n  }\n\n  @override\n  void error(String message, [Object? error, StackTrace? stackTrace]) {\n    \u002F\u002F your specific logging library implementation here\n  }\n}\n\nfinal client = ConfigDirectorClient(\n  clientSdkKey: 'YOUR-CLIENT-SDK-KEY',\n  options: ConfigDirectorClientOptions(logger: MyLogger()),\n);\n",[152,810,811,826,830,870,876,880,884,888,919,923,927,931,935,966,970,974,978,982,1012,1016,1020,1024,1028,1040,1050,1069],{"__ignoreMap":218},[222,812,813,815,818,821,824],{"class":224,"line":225},[222,814,229],{"class":228},[222,816,817],{"class":232}," MyLogger",[222,819,820],{"class":228}," implements",[222,822,823],{"class":232}," ConfigDirectorLogger",[222,825,243],{"class":242},[222,827,828],{"class":224,"line":246},[222,829,280],{"class":249},[222,831,832,834,837,839,842,845,848,851,854,857,860,862,865,867],{"class":224,"line":271},[222,833,376],{"class":249},[222,835,836],{"class":298}," debug",[222,838,527],{"class":242},[222,840,841],{"class":232},"String",[222,843,844],{"class":242}," message",[222,846,847],{"class":262},",",[222,849,850],{"class":242}," [",[222,852,853],{"class":232},"Object",[222,855,856],{"class":228},"?",[222,858,859],{"class":242}," error",[222,861,847],{"class":262},[222,863,864],{"class":232}," StackTrace",[222,866,856],{"class":228},[222,868,869],{"class":242}," stackTrace]) {\n",[222,871,872],{"class":224,"line":277},[222,873,875],{"class":874},"sutJx","    \u002F\u002F your specific logging library implementation here\n",[222,877,878],{"class":224,"line":283},[222,879,452],{"class":242},[222,881,882],{"class":224,"line":316},[222,883,274],{"emptyLinePlaceholder":32},[222,885,886],{"class":224,"line":322},[222,887,280],{"class":249},[222,889,890,892,895,897,899,901,903,905,907,909,911,913,915,917],{"class":224,"line":327},[222,891,376],{"class":249},[222,893,894],{"class":298}," info",[222,896,527],{"class":242},[222,898,841],{"class":232},[222,900,844],{"class":242},[222,902,847],{"class":262},[222,904,850],{"class":242},[222,906,853],{"class":232},[222,908,856],{"class":228},[222,910,859],{"class":242},[222,912,847],{"class":262},[222,914,864],{"class":232},[222,916,856],{"class":228},[222,918,869],{"class":242},[222,920,921],{"class":224,"line":346},[222,922,875],{"class":874},[222,924,925],{"class":224,"line":363},[222,926,452],{"class":242},[222,928,929],{"class":224,"line":368},[222,930,274],{"emptyLinePlaceholder":32},[222,932,933],{"class":224,"line":373},[222,934,280],{"class":249},[222,936,937,939,942,944,946,948,950,952,954,956,958,960,962,964],{"class":224,"line":385},[222,938,376],{"class":249},[222,940,941],{"class":298}," warn",[222,943,527],{"class":242},[222,945,841],{"class":232},[222,947,844],{"class":242},[222,949,847],{"class":262},[222,951,850],{"class":242},[222,953,853],{"class":232},[222,955,856],{"class":228},[222,957,859],{"class":242},[222,959,847],{"class":262},[222,961,864],{"class":232},[222,963,856],{"class":228},[222,965,869],{"class":242},[222,967,968],{"class":224,"line":400},[222,969,875],{"class":874},[222,971,972],{"class":224,"line":425},[222,973,452],{"class":242},[222,975,976],{"class":224,"line":430},[222,977,274],{"emptyLinePlaceholder":32},[222,979,980],{"class":224,"line":449},[222,981,280],{"class":249},[222,983,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010],{"class":224,"line":455},[222,985,376],{"class":249},[222,987,859],{"class":298},[222,989,527],{"class":242},[222,991,841],{"class":232},[222,993,844],{"class":242},[222,995,847],{"class":262},[222,997,850],{"class":242},[222,999,853],{"class":232},[222,1001,856],{"class":228},[222,1003,859],{"class":242},[222,1005,847],{"class":262},[222,1007,864],{"class":232},[222,1009,856],{"class":228},[222,1011,869],{"class":242},[222,1013,1014],{"class":224,"line":460},[222,1015,875],{"class":874},[222,1017,1018],{"class":224,"line":465},[222,1019,452],{"class":242},[222,1021,1022],{"class":224,"line":475},[222,1023,319],{"class":242},[222,1025,1026],{"class":224,"line":490},[222,1027,274],{"emptyLinePlaceholder":32},[222,1029,1030,1032,1034,1036,1038],{"class":224,"line":503},[222,1031,618],{"class":249},[222,1033,621],{"class":242},[222,1035,406],{"class":228},[222,1037,355],{"class":232},[222,1039,628],{"class":242},[222,1041,1042,1044,1046,1048],{"class":224,"line":508},[222,1043,633],{"class":242},[222,1045,210],{"class":228},[222,1047,417],{"class":416},[222,1049,640],{"class":262},[222,1051,1052,1054,1056,1058,1061,1063,1065,1067],{"class":224,"line":513},[222,1053,645],{"class":242},[222,1055,210],{"class":228},[222,1057,652],{"class":232},[222,1059,1060],{"class":242},"(logger",[222,1062,210],{"class":228},[222,1064,817],{"class":232},[222,1066,444],{"class":242},[222,1068,640],{"class":262},[222,1070,1071,1073],{"class":224,"line":518},[222,1072,420],{"class":242},[222,1074,268],{"class":262},[586,1076,1078],{"id":1077},"connection",[152,1079,1077],{},[145,1081,1082,1085],{},[152,1083,1084],{},"ConnectionOptions"," accepts five optional values:",[1087,1088,1089,1125,1147,1178,1204],"ul",{},[187,1090,1091,1094],{},[152,1092,1093],{},"mode",[1087,1095,1096,1114,1119],{},[187,1097,1098,1099,1102,1103,1106,1107,1110,1111,1113],{},"The connection mode, which can be ",[152,1100,1101],{},"streaming",", ",[152,1104,1105],{},"polling",", or ",[152,1108,1109],{},"oneTime",". It is recommended to use the default of ",[152,1112,1101],{}," unless you have a specific need to use one of the others instead.",[187,1115,1116,1118],{},[152,1117,1109],{}," fetches config state during initialization and on context updates only.",[187,1120,1121,1122],{},"Defaults to ",[152,1123,1124],{},"ConnectionMode.streaming",[187,1126,1127,1130],{},[152,1128,1129],{},"pollingInterval",[1087,1131,1132,1142],{},[187,1133,1134,1135,1137,1138,1141],{},"How often to re-fetch config state when ",[152,1136,1093],{}," is ",[152,1139,1140],{},"ConnectionMode.polling",". It has no effect in any other mode.",[187,1143,1121,1144],{},[152,1145,1146],{},"Duration(seconds: 60)",[187,1148,1149,1152],{},[152,1150,1151],{},"timeout",[1087,1153,1154,1167,1173],{},[187,1155,1156,1157,1159,1160,1163,1164,1166],{},"The timeout to be used in initialization and when updating the context. This is how long ",[152,1158,441],{}," will wait for data from ConfigDirector services before completing its ",[152,1161,1162],{},"Future",". If the timeout is reached, ",[152,1165,441],{}," will return but the client will still be in an unready status and returning default values. The client will continue to attempt to connect and retrieve config values in the background.",[187,1168,1169,1170,1172],{},"If your application is used in environments where the users frequently have poor or no connection, you may want to use a lower timeout, or simply don't await the ",[152,1171,441],{}," method call",[187,1174,1121,1175],{},[152,1176,1177],{},"Duration(seconds: 3)",[187,1179,1180,1183],{},[152,1181,1182],{},"pauseWhileBackgrounded",[1087,1184,1185,1199],{},[187,1186,1187,1188,1191,1192,1195,1196,159],{},"Whether to pause the connection while the app is in the background and resume it when the app returns to the foreground. Mobile operating systems terminate background connections on their own, so this is enabled by default. Set it to ",[152,1189,1190],{},"false"," to manage the connection yourself with ",[152,1193,1194],{},"pauseNetwork"," and ",[152,1197,1198],{},"resumeNetwork",[187,1200,1121,1201],{},[152,1202,1203],{},"true",[187,1205,1206,1209],{},[152,1207,1208],{},"baseUrl",[1087,1210,1211,1214],{},[187,1212,1213],{},"The base URL used to connect to ConfigDirector services",[187,1215,1216],{},"This should only be provided if your environment requires you to configure a proxy server in order to connect to ConfigDirector services",[212,1218,1220],{"className":214,"code":1219,"filename":611,"language":217,"meta":218,"style":218},"final client = ConfigDirectorClient(\n  clientSdkKey: 'YOUR-CLIENT-SDK-KEY',\n  options: const ConfigDirectorClientOptions(\n    connection: ConnectionOptions(\n      mode: ConnectionMode.streaming,\n      timeout: Duration(seconds: 2),\n    ),\n  ),\n);\n",[152,1221,1222,1234,1244,1256,1268,1284,1307,1313,1319],{"__ignoreMap":218},[222,1223,1224,1226,1228,1230,1232],{"class":224,"line":225},[222,1225,618],{"class":249},[222,1227,621],{"class":242},[222,1229,406],{"class":228},[222,1231,355],{"class":232},[222,1233,628],{"class":242},[222,1235,1236,1238,1240,1242],{"class":224,"line":246},[222,1237,633],{"class":242},[222,1239,210],{"class":228},[222,1241,417],{"class":416},[222,1243,640],{"class":262},[222,1245,1246,1248,1250,1252,1254],{"class":224,"line":271},[222,1247,645],{"class":242},[222,1249,210],{"class":228},[222,1251,546],{"class":249},[222,1253,652],{"class":232},[222,1255,628],{"class":242},[222,1257,1258,1261,1263,1266],{"class":224,"line":277},[222,1259,1260],{"class":242},"    connection",[222,1262,210],{"class":228},[222,1264,1265],{"class":232}," ConnectionOptions",[222,1267,628],{"class":242},[222,1269,1270,1273,1275,1278,1280,1282],{"class":224,"line":283},[222,1271,1272],{"class":242},"      mode",[222,1274,210],{"class":228},[222,1276,1277],{"class":232}," ConnectionMode",[222,1279,159],{"class":262},[222,1281,1101],{"class":242},[222,1283,640],{"class":262},[222,1285,1286,1289,1291,1294,1297,1299,1303,1305],{"class":224,"line":316},[222,1287,1288],{"class":242},"      timeout",[222,1290,210],{"class":228},[222,1292,1293],{"class":232}," Duration",[222,1295,1296],{"class":242},"(seconds",[222,1298,210],{"class":228},[222,1300,1302],{"class":1301},"srdBf"," 2",[222,1304,420],{"class":242},[222,1306,640],{"class":262},[222,1308,1309,1311],{"class":224,"line":322},[222,1310,695],{"class":242},[222,1312,640],{"class":262},[222,1314,1315,1317],{"class":224,"line":327},[222,1316,702],{"class":242},[222,1318,640],{"class":262},[222,1320,1321,1323],{"class":224,"line":346},[222,1322,420],{"class":242},[222,1324,268],{"class":262},[575,1326,1328],{"id":1327},"events","Events",[145,1330,1331,1332,1335],{},"Events notify you of some key actions from the client. Each one is exposed as a ",[152,1333,1334],{},"Stream"," you can listen to, and every stream is closed when the client is disposed:",[212,1337,1339],{"className":214,"code":1338,"filename":611,"language":217,"meta":218,"style":218},"client.onConfigEvaluated.listen((event) {\n  debugPrint('Received onConfigEvaluated: ${event.evaluation}');\n});\n",[152,1340,1341,1359,1392],{"__ignoreMap":218},[222,1342,1343,1346,1348,1351,1353,1356],{"class":224,"line":225},[222,1344,1345],{"class":242},"client",[222,1347,159],{"class":262},[222,1349,1350],{"class":242},"onConfigEvaluated",[222,1352,159],{"class":262},[222,1354,1355],{"class":298},"listen",[222,1357,1358],{"class":242},"((event) {\n",[222,1360,1361,1364,1366,1369,1373,1377,1379,1382,1385,1388,1390],{"class":224,"line":246},[222,1362,1363],{"class":298},"  debugPrint",[222,1365,527],{"class":242},[222,1367,1368],{"class":416},"'Received onConfigEvaluated: ",[222,1370,1372],{"class":1371},"sfo-9","${",[222,1374,1376],{"class":1375},"sfi6f","event",[222,1378,159],{"class":1371},[222,1380,1381],{"class":1375},"evaluation",[222,1383,1384],{"class":1371},"}",[222,1386,1387],{"class":416},"'",[222,1389,420],{"class":242},[222,1391,268],{"class":262},[222,1393,1394,1397],{"class":224,"line":271},[222,1395,1396],{"class":242},"})",[222,1398,268],{"class":262},[145,1400,1401],{},"The following events are available:",[1087,1403,1404,1434,1461,1485],{},[187,1405,1406,1414],{},[152,1407,1410,1411],{"className":1408},[1409],"font-semibold","onClientReady: Stream",[222,1412,1413],{},"ClientReadyEvent",[1087,1415,1416,1419],{},[187,1417,1418],{},"Emitted when the client is initialized, or after reconnection due to a context update or a resumed network connection. When this event is emitted it means the client has received a payload from the ConfigDirector servers and is ready to evaluate configs.",[187,1420,1421,1424,1425,1102,1428,1106,1431,159],{},[152,1422,1423],{},"action"," - The action that triggered the client to connect\u002Freconnect, which can be ",[152,1426,1427],{},"ClientConnectAction.initialization",[152,1429,1430],{},"ClientConnectAction.contextUpdate",[152,1432,1433],{},"ClientConnectAction.networkResume",[187,1435,1436,1443],{},[152,1437,1439,1440],{"className":1438},[1409],"onContextUpdated: Stream",[222,1441,1442],{},"ContextUpdatedEvent",[1087,1444,1445,1452],{},[187,1446,1447,1448,1451],{},"Emitted whenever the user context is updated, including during initialization. It is emitted before ",[152,1449,1450],{},"onClientReady",", therefore should not be relied upon as a lifecycle event but rather as an informational event to track updates to the user context.",[187,1453,1454,1457,1458,159],{},[152,1455,1456],{},"context"," - The user context the client is being updated to. It can be ",[152,1459,1460],{},"null",[187,1462,1463,1470],{},[152,1464,1466,1467],{"className":1465},[1409],"onConfigsUpdated: Stream",[222,1468,1469],{},"ConfigsUpdatedEvent",[1087,1471,1472,1475],{},[187,1473,1474],{},"Emitted when a payload is received from the ConfigDirector servers with config data. It is emitted during initialization or context update when an entire config payload is received. After initialization or context update, it is emitted when updates are pushed from the server (or discovered via polling if that connection mode is used).",[187,1476,1477,1480,1481,1484],{},[152,1478,1479],{},"keys"," - A ",[152,1482,1483],{},"List\u003CString>"," listing the config keys that were included in the payload from the server. On a delta update, these are only the configs that changed.",[187,1486,1487,1494],{},[152,1488,1490,1491],{"className":1489},[1409],"onConfigEvaluated: Stream",[222,1492,1493],{},"ConfigEvaluatedEvent",[1087,1495,1496,1506],{},[187,1497,1498,1499,1502,1503,159],{},"Emitted whenever a config is evaluated. This includes calls to ",[152,1500,1501],{},"getValue"," and evaluations delivered to listeners via ",[152,1504,1505],{},"watch",[187,1507,1508,1480,1510,1513,1514],{},[152,1509,1381],{},[152,1511,1512],{},"ConfigEvaluation"," object containing the details of the evaluation:\n",[1087,1515,1516,1522,1534,1547,1553,1559],{},[187,1517,1518,1521],{},[152,1519,1520],{},"key: String"," - The config key that was evaluated",[187,1523,1524,1527,1528,1530,1531,1533],{},[152,1525,1526],{},"value: Object"," - The value the config evaluated to. It can be the default value provided to ",[152,1529,1501],{}," or ",[152,1532,1505],{},". For example, if the config was evaluated before the client was initialized.",[187,1535,1536,1539,1540,1543,1544,1546],{},[152,1537,1538],{},"valueId: String?"," - The value ID, which is a stable hash of the value that can be used for analytics or other third parties rather than sending the ",[152,1541,1542],{},"value",". This can be useful for large values, like a JSON config, or to avoid disclosing the values themselves to third parties. It may be ",[152,1545,1460],{}," if the evaluation had to fall back to the default value.",[187,1548,1549,1552],{},[152,1550,1551],{},"isDefaultValue: bool"," - Whether or not the evaluation fell back to the default value provided in code.",[187,1554,1555,1558],{},[152,1556,1557],{},"context: ConfigDirectorContext?"," - The context the config was evaluated against, if one was set.",[187,1560,1561,1564,1565,1568,1569,1572,1573],{},[152,1562,1563],{},"reason: EvaluationReason"," - The reason for the evaluation resolution. In the case the config successfully evaluated based on server-provided targeting rules, it will be ",[152,1566,1567],{},"foundMatch",". If the evaluation had to fall back to the default value, the ",[152,1570,1571],{},"reason"," will encode why the fallback was required:\n",[1087,1574,1575,1581,1587,1593,1599,1605,1611],{},[187,1576,1577,1580],{},[152,1578,1579],{},"clientNotReady"," - The evaluation happened before the client finished initialization",[187,1582,1583,1586],{},[152,1584,1585],{},"configStateMissing"," - The requested config key was not present in the payload received from the server. This could be due to an incorrect config key, or a config that was not enabled to be available to client SDKs.",[187,1588,1589,1592],{},[152,1590,1591],{},"valueMissing"," - The config had no value for the current context.",[187,1594,1595,1598],{},[152,1596,1597],{},"invalidNumber"," - The config was requested as a number but the value received from the server could not be converted to a number.",[187,1600,1601,1604],{},[152,1602,1603],{},"invalidBoolean"," - The config was requested as a boolean but the value received from the server could not be converted to a boolean.",[187,1606,1607,1610],{},[152,1608,1609],{},"invalidJson"," - The config was requested as JSON but the value received from the server could not be converted to a JSON document.",[187,1612,1613,1616],{},[152,1614,1615],{},"typeMismatch"," - The config was requested with a data type that did not match the type of the config and no reasonable type conversion was possible.",[140,1618,1620],{"id":1619},"retrieve-config-values","Retrieve config values",[145,1622,1623,1624,1626],{},"To synchronously retrieve config values, use the client's ",[152,1625,1501],{}," method. It requires two arguments. The first argument is the config key, and the second is the default value to be returned if the client has not yet received config values from ConfigDirector services.",[145,1628,1629,1630,1632,1633,1635,1636,1639],{},"You can also subscribe to config value changes via the ",[152,1631,1505],{}," method. It requires two arguments, the config key and the default value, and returns a ",[152,1634,1334],{}," that emits the config's current value on subscription and then every time the evaluated value changes. Consecutive identical values are not re-emitted. Cancel the subscription to stop watching, or call the ",[152,1637,1638],{},"unwatch"," method to close every stream watching a specific config key.",[176,1641],{"name":1642},"sdks\u002Fflutter\u002Fsimple-usage",[145,1644,1645,1646,1195,1648,1650,1651,1102,1654,1102,1656,1102,1659,1102,1662,1665],{},"Both ",[152,1647,1501],{},[152,1649,1505],{}," infer their type from the default value, and accept any type supported by that specific config (",[152,1652,1653],{},"bool",[152,1655,841],{},[152,1657,1658],{},"int",[152,1660,1661],{},"double",[152,1663,1664],{},"num",", or any type a JSON config decodes into). If there is a type mismatch at runtime, the SDK will attempt to cast to the return value. If the cast fails, it will return the default value. Mismatched types at runtime are captured by the telemetry collector and will surface as warnings in the ConfigDirector dashboard.",[212,1667,1670],{"className":214,"code":1668,"filename":1669,"language":217,"meta":218,"style":218},"client.getValue('my-string-config-key', 'Default');\n\nclient.getValue('my-integer-config-key', 100);\n\nclient.getValue('my-boolean-config-key', false);\n\nclient.getValue\u003CMap\u003CString, dynamic>>('my-json-config-key', const {});\n","main.dart",[152,1671,1672,1694,1698,1720,1724,1747,1751],{"__ignoreMap":218},[222,1673,1674,1676,1678,1680,1682,1685,1687,1690,1692],{"class":224,"line":225},[222,1675,1345],{"class":242},[222,1677,159],{"class":262},[222,1679,1501],{"class":298},[222,1681,527],{"class":242},[222,1683,1684],{"class":416},"'my-string-config-key'",[222,1686,847],{"class":262},[222,1688,1689],{"class":416}," 'Default'",[222,1691,420],{"class":242},[222,1693,268],{"class":262},[222,1695,1696],{"class":224,"line":246},[222,1697,274],{"emptyLinePlaceholder":32},[222,1699,1700,1702,1704,1706,1708,1711,1713,1716,1718],{"class":224,"line":271},[222,1701,1345],{"class":242},[222,1703,159],{"class":262},[222,1705,1501],{"class":298},[222,1707,527],{"class":242},[222,1709,1710],{"class":416},"'my-integer-config-key'",[222,1712,847],{"class":262},[222,1714,1715],{"class":1301}," 100",[222,1717,420],{"class":242},[222,1719,268],{"class":262},[222,1721,1722],{"class":224,"line":277},[222,1723,274],{"emptyLinePlaceholder":32},[222,1725,1726,1728,1730,1732,1734,1737,1739,1743,1745],{"class":224,"line":283},[222,1727,1345],{"class":242},[222,1729,159],{"class":262},[222,1731,1501],{"class":298},[222,1733,527],{"class":242},[222,1735,1736],{"class":416},"'my-boolean-config-key'",[222,1738,847],{"class":262},[222,1740,1742],{"class":1741},"s39Yj"," false",[222,1744,420],{"class":242},[222,1746,268],{"class":262},[222,1748,1749],{"class":224,"line":316},[222,1750,274],{"emptyLinePlaceholder":32},[222,1752,1753,1755,1757,1759,1761,1764,1766,1768,1770,1773,1776,1779,1781,1783,1786],{"class":224,"line":322},[222,1754,1345],{"class":242},[222,1756,159],{"class":262},[222,1758,1501],{"class":298},[222,1760,289],{"class":242},[222,1762,1763],{"class":232},"Map",[222,1765,289],{"class":242},[222,1767,841],{"class":232},[222,1769,1102],{"class":242},[222,1771,1772],{"class":232},"dynamic",[222,1774,1775],{"class":242},">>(",[222,1777,1778],{"class":416},"'my-json-config-key'",[222,1780,847],{"class":262},[222,1782,546],{"class":249},[222,1784,1785],{"class":242}," {})",[222,1787,268],{"class":262},[145,1789,1790,1791,1793,1794,1797],{},"In widgets, ",[152,1792,1505],{}," pairs with a ",[152,1795,1796],{},"StreamBuilder"," so the widget rebuilds whenever the config changes, whether because it was edited in the ConfigDirector dashboard or because the context was updated:",[212,1799,1802],{"className":214,"code":1800,"filename":1801,"language":217,"meta":218,"style":218},"StreamBuilder\u003Cbool>(\n  stream: client.watch('dark-mode', false),\n  initialData: false,\n  builder: (context, snapshot) => MyHomePage(darkMode: snapshot.data ?? false),\n)\n","home_page.dart",[152,1803,1804,1815,1842,1853,1895],{"__ignoreMap":218},[222,1805,1806,1808,1810,1812],{"class":224,"line":225},[222,1807,1796],{"class":232},[222,1809,289],{"class":242},[222,1811,1653],{"class":232},[222,1813,1814],{"class":242},">(\n",[222,1816,1817,1820,1822,1825,1827,1829,1831,1834,1836,1838,1840],{"class":224,"line":246},[222,1818,1819],{"class":242},"  stream",[222,1821,210],{"class":228},[222,1823,1824],{"class":242}," client",[222,1826,159],{"class":262},[222,1828,1505],{"class":298},[222,1830,527],{"class":242},[222,1832,1833],{"class":416},"'dark-mode'",[222,1835,847],{"class":262},[222,1837,1742],{"class":1741},[222,1839,420],{"class":242},[222,1841,640],{"class":262},[222,1843,1844,1847,1849,1851],{"class":224,"line":271},[222,1845,1846],{"class":242},"  initialData",[222,1848,210],{"class":228},[222,1850,1742],{"class":1741},[222,1852,640],{"class":262},[222,1854,1855,1858,1860,1863,1865,1868,1870,1873,1876,1878,1881,1883,1886,1889,1891,1893],{"class":224,"line":277},[222,1856,1857],{"class":242},"  builder",[222,1859,210],{"class":228},[222,1861,1862],{"class":242}," (context",[222,1864,847],{"class":262},[222,1866,1867],{"class":242}," snapshot) ",[222,1869,305],{"class":228},[222,1871,1872],{"class":232}," MyHomePage",[222,1874,1875],{"class":242},"(darkMode",[222,1877,210],{"class":228},[222,1879,1880],{"class":242}," snapshot",[222,1882,159],{"class":262},[222,1884,1885],{"class":242},"data ",[222,1887,1888],{"class":228},"??",[222,1890,1742],{"class":1741},[222,1892,420],{"class":242},[222,1894,640],{"class":262},[222,1896,1897],{"class":224,"line":283},[222,1898,1899],{"class":242},")\n",[1901,1902,1903,1905,1906,1530,1908,1911,1912,1915],"warning",{},[152,1904,1505],{}," hands out a new stream on every call, so call it when its inputs change rather than on every build, from ",[152,1907,393],{},[152,1909,1910],{},"didChangeDependencies",", holding onto the stream in between. Calling it directly in ",[152,1913,1914],{},"build"," resubscribes on each rebuild.",[140,1917,1919],{"id":1918},"update-the-user-context","Update the user context",[176,1921],{"name":1922},"sdks\u002Fflutter\u002Fuser-context",[201,1924,1925,1926,1929,1930,1933],{},"In client SDKs (browser and mobile), updating the user context re-establishes a new connection to ConfigDirector servers with the new context. While the new connection is in flight, config values will continue to evaluate to the currently cached values from the prior user context.",[1927,1928],"br",{},"\nAwaiting ",[152,1931,1932],{},"updateContext"," will wait until the new config values are downloaded or the connection times out. In the case of a timeout, the client will continue to attempt to connect with the new context in the background.",[140,1935,1937],{"id":1936},"other-useful-client-features","Other useful client features",[145,1939,1940],{},"The client provides additional properties and methods.",[575,1942,1943],{"id":1456},[152,1944,1456],{},[145,1946,1947,1948,1950,1951,1953,1954,1956,1957,1959],{},"Returns the current user context (which may be ",[152,1949,1460],{},"). When calling ",[152,1952,1932],{},", the ",[152,1955,1456],{}," is not immediately updated. The ",[152,1958,1456],{}," is updated after the new connection for the new context succeeds (or times out and goes on retry).",[575,1961,1963],{"id":1962},"isready",[152,1964,1965],{},"isReady",[145,1967,1968,1969,1971,1972,1974,1975,1977,1978,1980,1981,1983,1984,1986,1987,1989,1990,1992],{},"Returns a ",[152,1970,1653],{}," indicating if the client has been successfully initialized and is ready to evaluate configs for the given user context. It is initially ",[152,1973,1190],{}," and becomes ",[152,1976,1203],{}," after ",[152,1979,441],{}," succeeds.\nUpon calling ",[152,1982,1932],{}," it becomes ",[152,1985,1190],{}," again and it is set to ",[152,1988,1203],{}," once ",[152,1991,1932],{}," succeeds.",[575,1994,1996],{"id":1995},"isinitializing",[152,1997,1998],{},"isInitializing",[145,2000,1968,2001,2003,2004,2006,2007,1977,2009,2011,2012,2014],{},[152,2002,1653],{}," indicating whether the client is currently initializing. It is ",[152,2005,1190],{}," on creation, ",[152,2008,1203],{},[152,2010,441],{}," is called, and ",[152,2013,1190],{}," again once initialization completes. This is useful to show a loading state instead of transitioning from the in-code default value to the evaluated value on a slow connection.",[575,2016,2018],{"id":2017},"unwatchall",[152,2019,2020],{},"unwatchAll",[145,2022,2023,2024,2026],{},"Closes every stream that was previously created via ",[152,2025,1505],{},", for all config keys.",[575,2028,2030,1195,2032],{"id":2029},"pausenetwork-and-resumenetwork",[152,2031,1194],{},[152,2033,1198],{},[145,2035,2036,2038,2039,2041,2042,1530,2044,159],{},[152,2037,1194],{}," releases the network connection without discarding config state, event listeners, or watch streams, and ",[152,2040,1198],{}," re-establishes it using the last context given to ",[152,2043,441],{},[152,2045,1932],{},[145,2047,2048,2049,2051,2052,2054],{},"The client already does this on its own while the app is backgrounded, so these are only needed if you set ",[152,2050,1182],{}," to ",[152,2053,1190],{}," in order to manage the connection yourself.",[575,2056,2057],{"id":483},[152,2058,483],{},[145,2060,2061,2062,2064],{},"Closes the connection, every watch stream, and every event stream, and reports whatever telemetry is left. Only call ",[152,2063,483],{}," when your application shuts down and it will no longer make use of the client instance. The client cannot be used afterwards.",[2066,2067,2068],"style",{},"html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sfo-9, html code.shiki .sfo-9{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sfi6f, html code.shiki .sfi6f{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":218,"searchDepth":246,"depth":246,"links":2070},[2071,2072,2073,2077,2078,2079],{"id":142,"depth":246,"text":143},{"id":165,"depth":246,"text":166},{"id":181,"depth":246,"text":182,"children":2074},[2075,2076],{"id":577,"depth":271,"text":578},{"id":1327,"depth":271,"text":1328},{"id":1619,"depth":246,"text":1620},{"id":1918,"depth":246,"text":1919},{"id":1936,"depth":246,"text":1937,"children":2080},[2081,2082,2083,2084,2085,2087],{"id":1456,"depth":271,"text":1456},{"id":1962,"depth":271,"text":1965},{"id":1995,"depth":271,"text":1998},{"id":2017,"depth":271,"text":2020},{"id":2029,"depth":271,"text":2086},"pauseNetwork and resumeNetwork",{"id":483,"depth":271,"text":483},"md",null,{},{"title":78,"icon":81},{"title":125,"description":218},"5ssd4PGHqqnHCPm8GJIbAH6zwsGZCVKtA-T-rYxfceA",[2095,2096],{"title":74,"path":75,"stem":76,"description":218,"icon":56,"children":-1},{"title":89,"path":90,"stem":91,"description":218,"icon":92,"children":-1},{"id":2098,"title":2099,"body":2100,"description":218,"extension":2088,"links":2089,"meta":2158,"navigation":6,"path":2159,"seo":2160,"stem":2161,"__hash__":2162},"docs\u002F_partials\u002Fsdks\u002Fflutter\u002Finstall.md","Install",{"type":127,"value":2101,"toc":2156},[2102,2153],[2103,2104,2105,2126],"code-group",{},[212,2106,2110],{"className":2107,"code":2108,"filename":132,"language":2109,"meta":218,"style":218},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","flutter pub add configdirector_flutter_client_sdk\n","bash",[152,2111,2112],{"__ignoreMap":218},[222,2113,2114,2117,2120,2123],{"class":224,"line":225},[222,2115,132],{"class":2116},"sbgvK",[222,2118,2119],{"class":416}," pub",[222,2121,2122],{"class":416}," add",[222,2124,2125],{"class":416}," configdirector_flutter_client_sdk\n",[212,2127,2132],{"className":2128,"code":2129,"filename":2130,"language":2131,"meta":218,"style":218},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","dependencies:\n  configdirector_flutter_client_sdk: ^0.1.0\n","pubspec.yaml","yaml",[152,2133,2134,2143],{"__ignoreMap":218},[222,2135,2136,2140],{"class":224,"line":225},[222,2137,2139],{"class":2138},"sQzsp","dependencies",[222,2141,2142],{"class":262},":\n",[222,2144,2145,2148,2150],{"class":224,"line":246},[222,2146,2147],{"class":2138},"  configdirector_flutter_client_sdk",[222,2149,210],{"class":262},[222,2151,2152],{"class":416}," ^0.1.0\n",[2066,2154,2155],{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":218,"searchDepth":246,"depth":246,"links":2157},[],{},"\u002F_partials\u002Fsdks\u002Fflutter\u002Finstall",{"description":218},"_partials\u002Fsdks\u002Fflutter\u002Finstall","jPpDaQ3xHOUB-jP4vkROJ7WYuMxqTKtHD_zKBl9l0js",{"id":2164,"title":2165,"body":2166,"description":218,"extension":2088,"links":2089,"meta":2234,"navigation":6,"path":2235,"seo":2236,"stem":2237,"__hash__":2238},"docs\u002F_partials\u002Fsdks\u002Fflutter\u002Fconfigure.md","Configure",{"type":127,"value":2167,"toc":2232},[2168,2229],[212,2169,2172],{"className":214,"code":2170,"filename":2171,"language":217,"meta":218,"style":218},"import 'package:configdirector_flutter_client_sdk\u002Fconfigdirector_flutter_client_sdk.dart';\n\nfinal client = ConfigDirectorClient(clientSdkKey: 'YOUR-CLIENT-SDK-KEY');\n\nawait client.initialize();\n","config_director_setup.dart (Initialize the client)",[152,2173,2174,2185,2189,2209,2213],{"__ignoreMap":218},[222,2175,2176,2180,2183],{"class":224,"line":225},[222,2177,2179],{"class":2178},"sw1J6","import",[222,2181,2182],{"class":416}," 'package:configdirector_flutter_client_sdk\u002Fconfigdirector_flutter_client_sdk.dart'",[222,2184,268],{"class":262},[222,2186,2187],{"class":224,"line":246},[222,2188,274],{"emptyLinePlaceholder":32},[222,2190,2191,2193,2195,2197,2199,2201,2203,2205,2207],{"class":224,"line":271},[222,2192,618],{"class":249},[222,2194,621],{"class":242},[222,2196,406],{"class":228},[222,2198,355],{"class":232},[222,2200,411],{"class":242},[222,2202,210],{"class":228},[222,2204,417],{"class":416},[222,2206,420],{"class":242},[222,2208,268],{"class":262},[222,2210,2211],{"class":224,"line":277},[222,2212,274],{"emptyLinePlaceholder":32},[222,2214,2215,2219,2221,2223,2225,2227],{"class":224,"line":283},[222,2216,2218],{"class":2217},"sVHd0","await",[222,2220,1824],{"class":242},[222,2222,159],{"class":262},[222,2224,441],{"class":298},[222,2226,311],{"class":242},[222,2228,268],{"class":262},[2066,2230,2231],{},"html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}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);}",{"title":218,"searchDepth":246,"depth":246,"links":2233},[],{},"\u002F_partials\u002Fsdks\u002Fflutter\u002Fconfigure",{"description":218},"_partials\u002Fsdks\u002Fflutter\u002Fconfigure","p8Idbv6wlBIUqq7PK1VA1qHBc5ahvlGudGOoPYwN0cM",{"id":2240,"title":2241,"body":2242,"description":218,"extension":2088,"links":2089,"meta":2416,"navigation":6,"path":2417,"seo":2418,"stem":2419,"__hash__":2420},"docs\u002F_partials\u002Fsdks\u002Fflutter\u002Fsimple-usage.md","Simple Usage",{"type":127,"value":2243,"toc":2414},[2244,2411],[212,2245,2248],{"className":214,"code":2246,"filename":2247,"language":217,"meta":218,"style":218},"import 'config_director_setup.dart';\n\n\u002F\u002F Retrieve the current value\nfinal value = client.getValue('my-config-key', false);\n\n\u002F\u002F Subscribe to value updates\nfinal subscription = client.watch('my-config-key', false).listen((newValue) {\n  debugPrint('Value updated: $newValue');\n});\n\nawait subscription.cancel(); \u002F\u002F Cancel the subscription to remove the listener\n\nclient.unwatch('my-config-key'); \u002F\u002F Closes every stream watching that key\n","main.dart (Use the client)",[152,2249,2250,2259,2263,2268,2296,2300,2305,2337,2358,2364,2368,2388,2392],{"__ignoreMap":218},[222,2251,2252,2254,2257],{"class":224,"line":225},[222,2253,2179],{"class":2178},[222,2255,2256],{"class":416}," 'config_director_setup.dart'",[222,2258,268],{"class":262},[222,2260,2261],{"class":224,"line":246},[222,2262,274],{"emptyLinePlaceholder":32},[222,2264,2265],{"class":224,"line":271},[222,2266,2267],{"class":874},"\u002F\u002F Retrieve the current value\n",[222,2269,2270,2272,2275,2277,2279,2281,2283,2285,2288,2290,2292,2294],{"class":224,"line":277},[222,2271,618],{"class":249},[222,2273,2274],{"class":242}," value ",[222,2276,406],{"class":228},[222,2278,1824],{"class":242},[222,2280,159],{"class":262},[222,2282,1501],{"class":298},[222,2284,527],{"class":242},[222,2286,2287],{"class":416},"'my-config-key'",[222,2289,847],{"class":262},[222,2291,1742],{"class":1741},[222,2293,420],{"class":242},[222,2295,268],{"class":262},[222,2297,2298],{"class":224,"line":283},[222,2299,274],{"emptyLinePlaceholder":32},[222,2301,2302],{"class":224,"line":316},[222,2303,2304],{"class":874},"\u002F\u002F Subscribe to value updates\n",[222,2306,2307,2309,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334],{"class":224,"line":322},[222,2308,618],{"class":249},[222,2310,2311],{"class":242}," subscription ",[222,2313,406],{"class":228},[222,2315,1824],{"class":242},[222,2317,159],{"class":262},[222,2319,1505],{"class":298},[222,2321,527],{"class":242},[222,2323,2287],{"class":416},[222,2325,847],{"class":262},[222,2327,1742],{"class":1741},[222,2329,420],{"class":242},[222,2331,159],{"class":262},[222,2333,1355],{"class":298},[222,2335,2336],{"class":242},"((newValue) {\n",[222,2338,2339,2341,2343,2346,2349,2352,2354,2356],{"class":224,"line":327},[222,2340,1363],{"class":298},[222,2342,527],{"class":242},[222,2344,2345],{"class":416},"'Value updated: ",[222,2347,2348],{"class":1371},"$",[222,2350,2351],{"class":1375},"newValue",[222,2353,1387],{"class":416},[222,2355,420],{"class":242},[222,2357,268],{"class":262},[222,2359,2360,2362],{"class":224,"line":346},[222,2361,1396],{"class":242},[222,2363,268],{"class":262},[222,2365,2366],{"class":224,"line":363},[222,2367,274],{"emptyLinePlaceholder":32},[222,2369,2370,2372,2375,2377,2380,2382,2385],{"class":224,"line":368},[222,2371,2218],{"class":2217},[222,2373,2374],{"class":242}," subscription",[222,2376,159],{"class":262},[222,2378,2379],{"class":298},"cancel",[222,2381,311],{"class":242},[222,2383,2384],{"class":262},";",[222,2386,2387],{"class":874}," \u002F\u002F Cancel the subscription to remove the listener\n",[222,2389,2390],{"class":224,"line":373},[222,2391,274],{"emptyLinePlaceholder":32},[222,2393,2394,2396,2398,2400,2402,2404,2406,2408],{"class":224,"line":385},[222,2395,1345],{"class":242},[222,2397,159],{"class":262},[222,2399,1638],{"class":298},[222,2401,527],{"class":242},[222,2403,2287],{"class":416},[222,2405,420],{"class":242},[222,2407,2384],{"class":262},[222,2409,2410],{"class":874}," \u002F\u002F Closes every stream watching that key\n",[2066,2412,2413],{},"html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sfo-9, html code.shiki .sfo-9{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sfi6f, html code.shiki .sfi6f{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}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);}",{"title":218,"searchDepth":246,"depth":246,"links":2415},[],{},"\u002F_partials\u002Fsdks\u002Fflutter\u002Fsimple-usage",{"description":218},"_partials\u002Fsdks\u002Fflutter\u002Fsimple-usage","UTNaLl5ZgEyQ0Owh1ugT50Rwy1cEeB-RUtCrNBKuVjs",{"id":2422,"title":2423,"body":2424,"description":2428,"extension":2088,"links":2089,"meta":2697,"navigation":6,"path":2698,"seo":2699,"stem":2700,"__hash__":2701},"docs\u002F_partials\u002Fsdks\u002Fflutter\u002Fuser-context.md","User Context",{"type":127,"value":2425,"toc":2695},[2426,2429,2560,2565,2692],[145,2427,2428],{},"A user context can be provided when initializing the client:",[212,2430,2432],{"className":214,"code":2431,"filename":611,"language":217,"meta":218,"style":218},"import 'package:configdirector_flutter_client_sdk\u002Fconfigdirector_flutter_client_sdk.dart';\n\nfinal client = ConfigDirectorClient(clientSdkKey: 'YOUR-CLIENT-SDK-KEY');\n\nawait client.initialize(\n  const ConfigDirectorContext(\n    id: '12345',\n    name: 'Example User',\n    traits: {\n      \u002F\u002F Any arbitrary traits which can be referenced in targeting rules\n      'region': 'North America',\n    },\n  ),\n);\n",[152,2433,2434,2442,2446,2466,2470,2482,2491,2503,2515,2524,2529,2541,2548,2554],{"__ignoreMap":218},[222,2435,2436,2438,2440],{"class":224,"line":225},[222,2437,2179],{"class":2178},[222,2439,2182],{"class":416},[222,2441,268],{"class":262},[222,2443,2444],{"class":224,"line":246},[222,2445,274],{"emptyLinePlaceholder":32},[222,2447,2448,2450,2452,2454,2456,2458,2460,2462,2464],{"class":224,"line":271},[222,2449,618],{"class":249},[222,2451,621],{"class":242},[222,2453,406],{"class":228},[222,2455,355],{"class":232},[222,2457,411],{"class":242},[222,2459,210],{"class":228},[222,2461,417],{"class":416},[222,2463,420],{"class":242},[222,2465,268],{"class":262},[222,2467,2468],{"class":224,"line":277},[222,2469,274],{"emptyLinePlaceholder":32},[222,2471,2472,2474,2476,2478,2480],{"class":224,"line":283},[222,2473,2218],{"class":2217},[222,2475,1824],{"class":242},[222,2477,159],{"class":262},[222,2479,441],{"class":298},[222,2481,628],{"class":242},[222,2483,2484,2486,2489],{"class":224,"line":316},[222,2485,250],{"class":249},[222,2487,2488],{"class":232}," ConfigDirectorContext",[222,2490,628],{"class":242},[222,2492,2493,2496,2498,2501],{"class":224,"line":322},[222,2494,2495],{"class":242},"    id",[222,2497,210],{"class":228},[222,2499,2500],{"class":416}," '12345'",[222,2502,640],{"class":262},[222,2504,2505,2508,2510,2513],{"class":224,"line":327},[222,2506,2507],{"class":242},"    name",[222,2509,210],{"class":228},[222,2511,2512],{"class":416}," 'Example User'",[222,2514,640],{"class":262},[222,2516,2517,2520,2522],{"class":224,"line":346},[222,2518,2519],{"class":242},"    traits",[222,2521,210],{"class":228},[222,2523,243],{"class":242},[222,2525,2526],{"class":224,"line":363},[222,2527,2528],{"class":874},"      \u002F\u002F Any arbitrary traits which can be referenced in targeting rules\n",[222,2530,2531,2534,2536,2539],{"class":224,"line":368},[222,2532,2533],{"class":416},"      'region'",[222,2535,210],{"class":228},[222,2537,2538],{"class":416}," 'North America'",[222,2540,640],{"class":262},[222,2542,2543,2546],{"class":224,"line":373},[222,2544,2545],{"class":242},"    }",[222,2547,640],{"class":262},[222,2549,2550,2552],{"class":224,"line":385},[222,2551,702],{"class":242},[222,2553,640],{"class":262},[222,2555,2556,2558],{"class":224,"line":400},[222,2557,420],{"class":242},[222,2559,268],{"class":262},[145,2561,2562,2563,210],{},"The user context can also be updated via ",[152,2564,1932],{},[212,2566,2568],{"className":214,"code":2567,"filename":1669,"language":217,"meta":218,"style":218},"import 'config_director_setup.dart';\n\nawait client.updateContext(\n  const ConfigDirectorContext(\n    id: '654321',\n    name: 'Another User',\n    traits: {'region': 'Australia'},\n  ),\n);\n\n\u002F\u002F Update it to a context with no `id` (anonymous user context) when a user\n\u002F\u002F signs out. The SDK generates a random identifier for it.\nawait client.updateContext(const ConfigDirectorContext());\n",[152,2569,2570,2578,2582,2594,2602,2613,2624,2645,2651,2657,2661,2666,2671],{"__ignoreMap":218},[222,2571,2572,2574,2576],{"class":224,"line":225},[222,2573,2179],{"class":2178},[222,2575,2256],{"class":416},[222,2577,268],{"class":262},[222,2579,2580],{"class":224,"line":246},[222,2581,274],{"emptyLinePlaceholder":32},[222,2583,2584,2586,2588,2590,2592],{"class":224,"line":271},[222,2585,2218],{"class":2217},[222,2587,1824],{"class":242},[222,2589,159],{"class":262},[222,2591,1932],{"class":298},[222,2593,628],{"class":242},[222,2595,2596,2598,2600],{"class":224,"line":277},[222,2597,250],{"class":249},[222,2599,2488],{"class":232},[222,2601,628],{"class":242},[222,2603,2604,2606,2608,2611],{"class":224,"line":283},[222,2605,2495],{"class":242},[222,2607,210],{"class":228},[222,2609,2610],{"class":416}," '654321'",[222,2612,640],{"class":262},[222,2614,2615,2617,2619,2622],{"class":224,"line":316},[222,2616,2507],{"class":242},[222,2618,210],{"class":228},[222,2620,2621],{"class":416}," 'Another User'",[222,2623,640],{"class":262},[222,2625,2626,2628,2630,2633,2636,2638,2641,2643],{"class":224,"line":322},[222,2627,2519],{"class":242},[222,2629,210],{"class":228},[222,2631,2632],{"class":242}," {",[222,2634,2635],{"class":416},"'region'",[222,2637,210],{"class":228},[222,2639,2640],{"class":416}," 'Australia'",[222,2642,1384],{"class":242},[222,2644,640],{"class":262},[222,2646,2647,2649],{"class":224,"line":327},[222,2648,702],{"class":242},[222,2650,640],{"class":262},[222,2652,2653,2655],{"class":224,"line":346},[222,2654,420],{"class":242},[222,2656,268],{"class":262},[222,2658,2659],{"class":224,"line":363},[222,2660,274],{"emptyLinePlaceholder":32},[222,2662,2663],{"class":224,"line":368},[222,2664,2665],{"class":874},"\u002F\u002F Update it to a context with no `id` (anonymous user context) when a user\n",[222,2667,2668],{"class":224,"line":373},[222,2669,2670],{"class":874},"\u002F\u002F signs out. The SDK generates a random identifier for it.\n",[222,2672,2673,2675,2677,2679,2681,2683,2686,2688,2690],{"class":224,"line":385},[222,2674,2218],{"class":2217},[222,2676,1824],{"class":242},[222,2678,159],{"class":262},[222,2680,1932],{"class":298},[222,2682,527],{"class":242},[222,2684,2685],{"class":249},"const",[222,2687,2488],{"class":232},[222,2689,444],{"class":242},[222,2691,268],{"class":262},[2066,2693,2694],{},"html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}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);}",{"title":218,"searchDepth":246,"depth":246,"links":2696},[],{},"\u002F_partials\u002Fsdks\u002Fflutter\u002Fuser-context",{"description":2428},"_partials\u002Fsdks\u002Fflutter\u002Fuser-context","1gWJx0Q_jSPDDkETIyaS0zBLlFEgnxeVXD1mkAGxbyM",1785992687877]