我正试图让Flutter变得更多。
我有一个按钮类,可以根据参数构建p2
或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
答案 0 :(得分:3)
您可以共享许多通用代码,如下所示:
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,
);
}