Flutter 为每个按钮类型指定 Button Theme
Flutter specify Button Theme for each button type
我正在开发 Flutter
应用程序,需要为每种按钮类型指定自定义 ButtonTheme
,即凸起、轮廓和扁平。
我在ThemeData
class中找到的参数只有buttonTheme
,而这个ButtonThemeData
是为所有按钮定义的:
static ThemeData darkTheme = ThemeData(
buttonTheme: const ButtonThemeData(
colorScheme: ColorScheme(
primary: Color(Constants.PrimaryColor),
primaryVariant: Color(Constants.PrimaryVariant),
),
textTheme: ButtonTextTheme.normal,
),
)
现在的问题是,如何为每个按钮类型定义一个单独的主题来更改,例如背景和文本颜色?
class SubmitButton extends StatelessWidget {
final String title;
final Function onPressed;
const SubmitButton({Key key, this.title, this.onPressed}) : super(key: key);
@override
Widget build(BuildContext context) {
return Theme(
data: ThemeData(
buttonTheme: const ButtonThemeData(
colorScheme: ColorScheme(
primary: Color(Constants.PrimaryColor),
primaryVariant: Color(Constants.PrimaryVariant),
),
textTheme: ButtonTextTheme.normal,
),
),
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
side: BorderSide(color: Colors.red),
),
color: Colors.red,
// color: Colors.transparent,
// disabledColor: Colors.grey
textColor: Colors.white,
onPressed: onPressed,
child: Container(
child: Text(title),
),
),
);
}
}
在这里你可以用 FlatButton 或 outlinedButton 替换 RaisedButton
并为所有类型的按钮赋予特定主题。
所以你可以重复使用它。
你可以这样使用它:
SubmitButton(
title: "View Details",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => GeneratePDF(),
),
);
},
),
在我看来,最好的方法是创建您自己的自定义小部件,其行为就像一个按钮。您将更好地控制按钮的功能。
https://flutter.dev/docs/development/ui/interactive
这样您就可以定义自定义回调并避免通常按钮的标准行为。例如,如果您想要特定按钮的不同动画。
class MyFlatButtonCustomWidget extends Stateless/Stateful {
@override
Widget build(BuildContext context) {
return Container{
// create the shape of a button and add your custom widget tree and behavior
}
}
}
另一种方法是创建一个扩展默认小部件的自定义小部件:
class MyFlatButton extends FlatButton {
}
但你也可以简单地
class MyFlatButton {
@override
Widget build(BuildContext context) {
return FlatButton{
// put your stylings here
}
}
}
如果您愿意,可以在定义 ThemeData
时定义按钮的主题
https://api.flutter.dev/flutter/material/ThemeData-class.html
theme: ThemeData(
primarySwatch: Colors.green,
splashColor: Colors.pink,
buttonTheme: ButtonThemeData(
// splashColor:Colors.pink, //we don't define the splashColor in ButtonThemeDaa
height:60
)
),
作为我使用的来源:
https://www.ernegonzal.com/theme-flutter-buttons/
一篇涵盖该主题的好文章。
我正在开发 Flutter
应用程序,需要为每种按钮类型指定自定义 ButtonTheme
,即凸起、轮廓和扁平。
我在ThemeData
class中找到的参数只有buttonTheme
,而这个ButtonThemeData
是为所有按钮定义的:
static ThemeData darkTheme = ThemeData(
buttonTheme: const ButtonThemeData(
colorScheme: ColorScheme(
primary: Color(Constants.PrimaryColor),
primaryVariant: Color(Constants.PrimaryVariant),
),
textTheme: ButtonTextTheme.normal,
),
)
现在的问题是,如何为每个按钮类型定义一个单独的主题来更改,例如背景和文本颜色?
class SubmitButton extends StatelessWidget {
final String title;
final Function onPressed;
const SubmitButton({Key key, this.title, this.onPressed}) : super(key: key);
@override
Widget build(BuildContext context) {
return Theme(
data: ThemeData(
buttonTheme: const ButtonThemeData(
colorScheme: ColorScheme(
primary: Color(Constants.PrimaryColor),
primaryVariant: Color(Constants.PrimaryVariant),
),
textTheme: ButtonTextTheme.normal,
),
),
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
side: BorderSide(color: Colors.red),
),
color: Colors.red,
// color: Colors.transparent,
// disabledColor: Colors.grey
textColor: Colors.white,
onPressed: onPressed,
child: Container(
child: Text(title),
),
),
);
}
}
在这里你可以用 FlatButton 或 outlinedButton 替换 RaisedButton 并为所有类型的按钮赋予特定主题。 所以你可以重复使用它。
你可以这样使用它:
SubmitButton(
title: "View Details",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => GeneratePDF(),
),
);
},
),
在我看来,最好的方法是创建您自己的自定义小部件,其行为就像一个按钮。您将更好地控制按钮的功能。 https://flutter.dev/docs/development/ui/interactive 这样您就可以定义自定义回调并避免通常按钮的标准行为。例如,如果您想要特定按钮的不同动画。
class MyFlatButtonCustomWidget extends Stateless/Stateful {
@override
Widget build(BuildContext context) {
return Container{
// create the shape of a button and add your custom widget tree and behavior
}
}
}
另一种方法是创建一个扩展默认小部件的自定义小部件:
class MyFlatButton extends FlatButton {
}
但你也可以简单地
class MyFlatButton {
@override
Widget build(BuildContext context) {
return FlatButton{
// put your stylings here
}
}
}
如果您愿意,可以在定义 ThemeData
时定义按钮的主题
https://api.flutter.dev/flutter/material/ThemeData-class.html
theme: ThemeData(
primarySwatch: Colors.green,
splashColor: Colors.pink,
buttonTheme: ButtonThemeData(
// splashColor:Colors.pink, //we don't define the splashColor in ButtonThemeDaa
height:60
)
),
作为我使用的来源: https://www.ernegonzal.com/theme-flutter-buttons/ 一篇涵盖该主题的好文章。