📅  最后修改于: 2023-12-03 14:41:16.715000             🧑  作者: Mango
Flutter 是一款由 Google 开发的跨平台 UI 框架。它能够让程序员构建高性能、高保真度的应用程序,并可以运行在多种平台上,包括 iOS、Android、Web 以及桌面端。
Flutter 使用小部件(Widgets)来构建视图。小部件是 Flutter 的基本构建块,用于描述应用程序的视图层次结构。Flutter 提供了丰富的小部件库,开发者可以通过组合这些小部件来构建复杂的 UI。
然而,有时候,内置的小部件并不能满足我们的需求。这时候,我们就需要扩展小部件,以便实现自己的视图组件。
Flutter 提供了两种方式用于扩展小部件:
继承现有的小部件是一种简单的扩展方式。这种方式可以让我们在不从头开始构建小部件的情况下,通过继承已有的小部件,重新定义它的行为,实现自己需要的效果。
以继承 Container
为例,我们可以创建一个新的 MyContainer
小部件,重新定义 Container
的颜色和边框:
class MyContainer extends Container {
MyContainer({Key key, Widget child})
: super(
key: key,
child: child,
decoration: BoxDecoration(
color: Colors.red,
border: Border.all(
color: Colors.black,
width: 2.0,
),
),
);
}
这个 MyContainer
小部件与 Container
小部件基本相同。唯一的区别在于它的颜色和边框样式。
第二种扩展方式是创建自定义小部件。这种方式需要我们从头开始构建小部件,并实现它自己的行为。
以创建一个自定义的旋转按钮为例,我们需要先构建一个按钮(CustomButton
),并定义它的点击事件。接着,在按钮组件中,我们通过继承 RawMaterialButton
并重写 build
方法,实现自己的按钮样式和旋转效果:
class CustomButton extends StatefulWidget {
final VoidCallback onPressed;
CustomButton({Key key, @required this.onPressed})
: super(key: key);
@override
_CustomButtonState createState() => _CustomButtonState();
}
class _CustomButtonState extends State<CustomButton>
with SingleTickerProviderStateMixin {
AnimationController _animationController;
@override
void initState() {
super.initState();
_animationController =
AnimationController(vsync: this, duration: Duration(seconds: 2));
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return RotationTransition(
turns:
Tween(begin: 0.0, end: 1.0).animate(_animationController),
child: RawMaterialButton(
onPressed: () {
_animationController.repeat();
widget.onPressed();
},
elevation: 2.0,
fillColor: Colors.blue,
child: Icon(
Icons.refresh,
color: Colors.white,
),
padding: EdgeInsets.all(15.0),
shape: CircleBorder(),
),
);
}
}
这个 CustomButton
小部件可以通过以下方式使用:
CustomButton(
onPressed: () {
// do something
},
),
Flutter 的小部件体系非常丰富,几乎可以满足开发者的所有需求。但在某些情况下,我们需要扩展小部件以满足特定的需求。Flutter 提供了两种扩展方式:继承现有的小部件和创建自定义小部件。开发者可以根据自己的需求选择合适的方式。