获取 state/variable 个其他有状态小部件
Fetch state/variable of other Stateful widgets
我想获取其他Stateful Widget的变量
比如我有SmartTag
、MySlider
、MyHomePage
三个widget
MyHomePage
有 SmartTag
和 MySlider
(此代码不正确只是大图像)
class _SmartTagState extends State<_SmartTagState>{
var tagState;
class _MySliderState extends State<_MySliderState>{
var sliderState;
class MyHomePage extends StatefulWidget {}
class _MyHomePageState extends State<MyHomePage> {
return Row(
children:[
MySlider(),
SmartTag()
floatingActionButton: FloatingActionButton(
onPressed: (){
print(MySlider.sliderState)// I want to get the variable fron another widget.
print(SmartTag.tagState)// I want to get the variable fron another widget.
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
]
)
}
我想做的是,在按下按钮时获取其他小部件变量。
所以,我有一些问题。
- 有没有办法从
_MyHomePageState
获取其他小部件(SmartTag
,MySlider
)变量?
_MyHomePageState
应该从头开始有所有变量? (但是当代码又长又完整时,它就没有用了)
感谢任何帮助。
将要拉取的变量定义为静态变量并像这样使用它们
class _SmartTagState extends State<_SmartTagState>{
static tagState;
class _MySliderState extends State<_MySliderState>{
static sliderState;
class MyHomePage extends StatefulWidget {}
class _MyHomePageState extends State<MyHomePage> {
return Row(
children:[
MySlider(),
SmartTag()
floatingActionButton: FloatingActionButton(
onPressed: (){
print(MySlider.sliderState)// I want to get the variable fron another widget.
print(SmartTag.tagState)// I want to get the variable fron another widget.
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
]
)
}
您可以将回调函数传递给您的子小部件,并在 MyHomePage
:
中更新该小部件的相应变量
class MyHomePage extends StatefulWidget {
const MyHomePage({ Key? key }) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var tagValue = ...
var sliderValue = ...
@override
Widget build(BuildContext context) {
return Row(
children:[
MySlider(
onChange: (value){
setState(() {
sliderValue = value;
});
}
),
SmartTag(
onChange: (value){
setState(() {
tagValue = value;
});
}
)
floatingActionButton: FloatingActionButton(
onPressed: (){
print(MySlider.sliderState)// I want to get the variable fron another widget.
print(SmartTag.tagState)// I want to get the variable fron another widget.
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
]
);
}
}
您的子窗口小部件将是这样的:
class SmartTag extends StatefulWidget {
const SmartTag({ Key? key ,required this.onChange}) : super(key: key);
final Function(dynamic value) onChange;
@override
State<SmartTag> createState() => _SmartTagState();
}
class _SmartTagState extends State<SmartTag> {
@override
Widget build(BuildContext context) {
return Container(
);
}
}
我想获取其他Stateful Widget的变量
比如我有SmartTag
、MySlider
、MyHomePage
MyHomePage
有 SmartTag
和 MySlider
(此代码不正确只是大图像)
class _SmartTagState extends State<_SmartTagState>{
var tagState;
class _MySliderState extends State<_MySliderState>{
var sliderState;
class MyHomePage extends StatefulWidget {}
class _MyHomePageState extends State<MyHomePage> {
return Row(
children:[
MySlider(),
SmartTag()
floatingActionButton: FloatingActionButton(
onPressed: (){
print(MySlider.sliderState)// I want to get the variable fron another widget.
print(SmartTag.tagState)// I want to get the variable fron another widget.
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
]
)
}
我想做的是,在按下按钮时获取其他小部件变量。
所以,我有一些问题。
- 有没有办法从
_MyHomePageState
获取其他小部件(SmartTag
,MySlider
)变量? _MyHomePageState
应该从头开始有所有变量? (但是当代码又长又完整时,它就没有用了)
感谢任何帮助。
将要拉取的变量定义为静态变量并像这样使用它们
class _SmartTagState extends State<_SmartTagState>{
static tagState;
class _MySliderState extends State<_MySliderState>{
static sliderState;
class MyHomePage extends StatefulWidget {}
class _MyHomePageState extends State<MyHomePage> {
return Row(
children:[
MySlider(),
SmartTag()
floatingActionButton: FloatingActionButton(
onPressed: (){
print(MySlider.sliderState)// I want to get the variable fron another widget.
print(SmartTag.tagState)// I want to get the variable fron another widget.
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
]
)
}
您可以将回调函数传递给您的子小部件,并在 MyHomePage
:
class MyHomePage extends StatefulWidget {
const MyHomePage({ Key? key }) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var tagValue = ...
var sliderValue = ...
@override
Widget build(BuildContext context) {
return Row(
children:[
MySlider(
onChange: (value){
setState(() {
sliderValue = value;
});
}
),
SmartTag(
onChange: (value){
setState(() {
tagValue = value;
});
}
)
floatingActionButton: FloatingActionButton(
onPressed: (){
print(MySlider.sliderState)// I want to get the variable fron another widget.
print(SmartTag.tagState)// I want to get the variable fron another widget.
},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
]
);
}
}
您的子窗口小部件将是这样的:
class SmartTag extends StatefulWidget {
const SmartTag({ Key? key ,required this.onChange}) : super(key: key);
final Function(dynamic value) onChange;
@override
State<SmartTag> createState() => _SmartTagState();
}
class _SmartTagState extends State<SmartTag> {
@override
Widget build(BuildContext context) {
return Container(
);
}
}