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