我正在尝试更多地了解Flutter。
我有一个按钮类,它可以根据参数构建FlatButton
或OutlineButton
import 'package:flutter/material.dart';
class Button extends StatelessWidget {
final String text;
final VoidCallback onPressed;
final Color backgroundColor;
final Color textColor;
final bool isOutline;
Button(
{@required this.text,
@required this.onPressed,
this.backgroundColor = Colors.deepOrange,
this.textColor = Colors.white,
this.isOutline = false});
@override
Widget build(BuildContext context) {
return this.isOutline
? _buildOutlineButton(context)
: _buildFlatButton(context);
}
FlatButton _buildFlatButton(BuildContext context) {
return FlatButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0),
),
color: this.backgroundColor,
onPressed: this.onPressed,
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 20.0,
horizontal: 20.0,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
this.text,
textAlign: TextAlign.center,
style:
TextStyle(color: this.textColor, fontWeight: FontWeight.bold),
),
),
],
),
),
);
}
OutlineButton _buildOutlineButton(BuildContext context) {
return OutlineButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0),
),
color: this.backgroundColor,
onPressed: this.onPressed,
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 20.0,
horizontal: 20.0,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
this.text,
textAlign: TextAlign.center,
style:
TextStyle(color: this.textColor, fontWeight: FontWeight.bold),
),
),
],
),
),
);
}
}
_build*Button
函数看起来都很相似。有没有一种方法可以简单地编写代码?这样的东西(前面的伪代码):final type = this.isOutline ? OutlineButton : FlatButton;
return type(shape: ..., color: ..., ...);
您可以像这样共享许多通用代码:
MaterialButton _buildButton(bool flat, BuildContext context) {
Container container = Container(
padding: const EdgeInsets.symmetric(
vertical: 20.0,
horizontal: 20.0,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
text,
textAlign: TextAlign.center,
style: TextStyle(color: textColor, fontWeight: FontWeight.bold),
),
),
],
),
);
RoundedRectangleBorder border = RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0),
);
return flat
? FlatButton(
shape: border,
color: backgroundColor,
onPressed: onPressed,
child: container,
)
: RaisedButton(
shape: border,
color: backgroundColor,
onPressed: onPressed,
child: container,
);
}
关于dart - 确定在运行时构造哪种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55052842/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) | Powered by Discuz! X3.4 |