是否可以执行一个函数,myFunction()如果变量_myString发生更改,我们可以调用它,但是这种情况是动态发生的吗?
我所拥有的是 atextfield和 acontroller
var _myString;
const TextField(
controller:_controller
)
Run Code Online (Sandbox Code Playgroud)
现在,在我的小部件树的其他位置,我有一个可以更改 的值的按钮_myString,在本例中,我将 '_myString' 更改为 'Testing'
GestureDetector(
onTap:(){ _myString = 'Testing'; }
child: Text('Testing')
)
Run Code Online (Sandbox Code Playgroud)
现在我希望实现的是,当价值_myString以任何方式发生变化时,我可以执行我选择的某些操作。在本例中,我想使用 编辑 TextField _controller,但我不仅想这样做,还想执行其他一些操作,因此我认为最好监听该变量的更改,然后执行函数
void myFunction(){
///Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
我riverpod在我的应用程序中用于状态管理,我想我可以尝试使用它,但不知道如何使用它来观看单个变量,我更熟悉将它用于整个小部件。或者使用 Riverpod 来做这样的事情可能有点矫枉过正。
我只是不知道如何解决这个问题,所以任何指导将非常感激!
h8m*_*oss 19
我相信您可以使用 aValueNotifier来实现此目的,值通知器是一个保存某些值并在该值更改时“通知”其侦听器的类。它是一个更简单的版本ChangeNotifier:
ValueNotifier<String> _myString = ValueNotifier<String>('');
Run Code Online (Sandbox Code Playgroud)
通过上面的内容,每当您想要读取或写入值时,请使用值 getter/setter:
print(_myString.value);
_myString.value = 'some value';
Run Code Online (Sandbox Code Playgroud)
现在,要监听更改,您应该使用以下addListener方法:
@override
initState() {
// update _controller with value whenever _myString changes
_myString.addListener(() => _controller.text = _myString.value);
// print value on change
_myString.addListener(() => print(_myString.value));
// do stuff
_myString.addListener(myFunction)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8439 次 |
| 最近记录: |