findProvider<P extends DataProvider> function
v3.x var ref = loginFormRef.info.nickNameRef;
var nickName = ref.value // get value ref.value = '123' // set value
var node = Binding.mount(context); // old dependentExecutor dispose
var binding = dataRef(node) // dataRef to binding var binding = loginFormRef.info.nickNameRef(node) // ref to binding
var nickName = binding.value // get value but no bind binding.value = '123' // set value but do not update page binding.bindChange() // get value and add dependentExecutor binding.notifyChange('123'); // set value and update page
loginFormRef.info.nickNameRef(node).bindChange() // get value and add dependentExecutor loginFormRef.info.nickNameRef(node).notifyChange('123'); // set value and update page loginFormRef.info.nickNameRef(node).value // get value but no bind loginFormRef.info.nickNameRef(node).value = '123'; // set value but do not update page
var nickName = loginFormRef.info.nickNameRef.bindChange(node: node) // get value and add dependentExecutor loginFormRef.Info.nickNameRef.notifyChange(node: node, value: '123'); // set value and update page
bindChangeNotifier(node: node, ref: loginFormRef.info.nickName, changeNotifier: changeNotifier, notifyListener: notifyListener, onChange: onChange); bindValueNotifier(node: node, ref: loginFormRef.info.nickName, valueNotifier: valueNotifier);
Implementation
P? findProvider<P extends DataProvider>(BuildContext context) {
tryProvider(element) {
if (element is ComponentElement) {
if (element is StatefulElement && element.state is P) {
return element.state as P;
} else if (element is StatelessElement && element.widget is P) {
return element.widget as P;
}
}
return null;
}
P? provider;
context.visitAncestorElements((ancestor) {
provider = tryProvider(ancestor);
if (provider != null) {
return false;
}
return true;
});
return provider;
}