要修改OutlineButton 的背景颜色,您可以使用DecoratedBox 和Theme 小部件。在这个答案的最后,你会找到一个简单的例子。
无论如何,我仍然推荐简单地使用带有color 属性的FlatButton。
将您的OutlinedButton 包裹在DecoratedBox 中。将DecoratedBox 的shape 设置为与OutlinedButton 相同的形状。现在您可以使用DecoratedBox 的color 属性来更改颜色。结果仍然会在OutlinedButton 周围有一个小填充。要删除它,您可以将DecoratedBox 包裹在Theme 中,您可以在其中调整ButtonTheme。在您要设置的ButtonTheme 内部materialTapTargetSize: MaterialTapTargetSize.shrinkWrap。
在 Flutter 内部添加了填充,以将按钮周围的点击区域增加到最小尺寸 48x48 (source)。将 materialTapTargetSize 设置为 MaterialTapTargetSize.shrinkWrap 会删除此最小大小。
FlatButton 示例:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: FlatButton(
color: Colors.pinkAccent,
shape: CircleBorder(),
onPressed: () => {},
child: Text('A'),
),
),
),
);
}
}
OutlinedButton 示例:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: MyButton(),
),
),
);
}
}
class MyButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return DecoratedBox(
decoration:
ShapeDecoration(shape: CircleBorder(), color: Colors.pinkAccent),
child: Theme(
data: Theme.of(context).copyWith(
buttonTheme: ButtonTheme.of(context).copyWith(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap)),
child: OutlineButton(
shape: CircleBorder(),
child: Text('A'),
onPressed: () => {},
),
),
);
}
}