📅  最后修改于: 2023-12-03 15:08:14.740000             🧑  作者: Mango
在 Flutter 中,小部件可以被分成两类:Stateless Widget(无状态小部件)和 Stateful Widget(有状态小部件)。其中,Stateful Widget 可以处理用户交互、网络请求等复杂操作,而且它们可以更新他们自己的状态。本文将介绍如何从框架提供的 Stateful Widget 颤动中获取参数值。
为了更好地理解本文,让我们看一个例子。例如,我们有一个带有颤动功能的有状态小部件:
class ShakingWidget extends StatefulWidget {
final String text;
ShakingWidget({required this.text});
@override
_ShakingWidgetState createState() => _ShakingWidgetState();
}
class _ShakingWidgetState extends State<ShakingWidget>
with SingleTickerProviderStateMixin {
late AnimationController _animationController;
late Animation<Offset> _offsetAnimation;
@override
void initState() {
_animationController = AnimationController(
vsync: this,
duration: Duration(milliseconds: 500),
)..repeat(reverse: true);
_offsetAnimation = Tween<Offset>(
begin: Offset.zero,
end: Offset(0.0, 0.1),
).animate(CurvedAnimation(
parent: _animationController,
curve: Curves.linear,
));
super.initState();
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SlideTransition(
position: _offsetAnimation,
child: Text(widget.text),
);
}
}
这个小部件会使它的子元素(一个 Text)颤动起来。
我们将使用这个 ShakingWidget 作为例子,来讲解如何从框架提供的 Stateful Widget 颤动中获取参数值。
在 Flutter 中,我们一般使用 StatefulWidget 颤动来更新有状态小部件的状态。让我们看一下在我们的示例中,如何在点击按钮时从 ShakingWidget 中获取参数值。
首先,在我们的 Widget 树中添加一个按钮:
class MyHomePage extends StatelessWidget {
final String title;
MyHomePage({required this.title});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: ShakingWidget(text: 'Click the button to get the value!'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// TODO: Get the value from ShakingWidget
},
tooltip: 'Get Value',
child: Icon(Icons.add),
),
);
}
}
接下来,我们在 ShakingWidget 中添加一个函数(例如 getValue),它返回我们想要的参数值(例如 text)。
class _ShakingWidgetState extends State<ShakingWidget>
with SingleTickerProviderStateMixin {
...
String getValue() {
return widget.text;
}
...
}
现在,我们可以在 FloatingActionButton 的 onPressed 事件处理函数中调用 getValue 函数,以获取我们想要的参数值。
onPressed: () {
ShakingWidget shakingWidget = context.findAncestorWidgetOfExactType();
String value = shakingWidget.getValue();
print(value);
},
这里的关键是,我们使用 context.findAncestorWidgetOfExactType 来查找 ShakingWidget 。这个函数会向上遍历控件树,直到找到我们想要的小部件。
使用这种方法,我们可以很容易地获取任何有状态小部件中的参数值。
本文介绍了如何从框架提供的 Stateful Widget 颤动中获取参数值。我们以我们的例子 ShakingWidget 为例,演示了如何使用 context.findAncestorWidgetOfExactType 来访问任何一个有状态小部件中的参数值。
在实际开发中,你可能需要在有状态小部件中混合使用多个小部件,以处理复杂的任务。现在,你学会了如何从这些小部件中获取参数值,将能够更轻松地管理它们,提升了你的 Flutter 应用程序的开发效率。