Flutter 颤振网页-悬停时如何更改扁平按钮文本颜色
您好,我正在处理颤振网页,当我悬停扁平按钮时,我想更改文本颜色。它处于悬停状态,而不是处于按下状态。但是我如何检测/知道它已被悬停,以便我可以管理状态颜色。谢谢Flutter 颤振网页-悬停时如何更改扁平按钮文本颜色,flutter,flutter-layout,flutter-web,Flutter,Flutter Layout,Flutter Web,您好,我正在处理颤振网页,当我悬停扁平按钮时,我想更改文本颜色。它处于悬停状态,而不是处于按下状态。但是我如何检测/知道它已被悬停,以便我可以管理状态颜色。谢谢 FlatButton( color: Colors.white, textColor: Colors.teal[700], //when hovered text color change shape: RoundedRectangleBorder(
FlatButton(
color: Colors.white,
textColor: Colors.teal[700], //when hovered text color change
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(
color: Colors.teal[700],
),
),
onPressed: () {},
child: Text("Log in"),
),
您可以复制粘贴运行下面的完整代码
您可以使用鼠标区域的
onHover
属性
代码片段
void _incrementExit(PointerEvent details) {
setState(() {
textColor = Colors.blue;
_exitCounter++;
});
}
void _updateLocation(PointerEvent details) {
setState(() {
textColor = Colors.red;
x = details.position.dx;
y = details.position.dy;
});
}
return MouseRegion(
onEnter: _incrementEnter,
onHover: _updateLocation,
onExit: _incrementExit,
child: FlatButton(
color: Colors.white,
textColor: Colors.teal[700], //when hovered text color change
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
工作演示
完整代码
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
void main() => runApp(MyApp());
/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: Center(
child: MyStatefulWidget(),
),
),
);
}
}
class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
Color textColor = Colors.blue;
int _enterCounter = 0;
int _exitCounter = 0;
double x = 0.0;
double y = 0.0;
void _incrementEnter(PointerEvent details) {
setState(() {
_enterCounter++;
});
}
void _incrementExit(PointerEvent details) {
setState(() {
textColor = Colors.blue;
_exitCounter++;
});
}
void _updateLocation(PointerEvent details) {
setState(() {
textColor = Colors.red;
x = details.position.dx;
y = details.position.dy;
});
}
@override
Widget build(BuildContext context) {
return MouseRegion(
onEnter: _incrementEnter,
onHover: _updateLocation,
onExit: _incrementExit,
child: FlatButton(
color: Colors.white,
textColor: Colors.teal[700], //when hovered text color change
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(
color: Colors.teal[700],
),
),
onPressed: () {},
child: Text("Log in", style: TextStyle(color: textColor),),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:flatter/widgets.dart”;
void main()=>runApp(MyApp());
///此小部件是主应用程序小部件。
类MyApp扩展了无状态小部件{
静态常量字符串_title='颤振代码示例';
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:_标题,
家:脚手架(
appBar:appBar(标题:常量文本(_title)),
正文:中(
子项:MyStatefulWidget(),
),
),
);
}
}
类MyStatefulWidget扩展了StatefulWidget{
MyStatefulWidget({Key}):超级(Key:Key);
@凌驾
_MyStatefulWidgetState createState()=>\u MyStatefulWidgetState();
}
类_MyStatefulWidgetState扩展状态{
Color text颜色=Colors.blue;
int _enterCounter=0;
int _exitCounter=0;
双x=0.0;
双y=0.0;
void\u递增输入(PointerEvent详细信息){
设置状态(){
_enterCounter++;
});
}
void _incrementExit(PointerEvent详细信息){
设置状态(){
textColor=Colors.blue;
_exitCounter++;
});
}
void\u updateLocation(PointerEvent详细信息){
设置状态(){
textColor=Colors.red;
x=details.position.dx;
y=details.position.dy;
});
}
@凌驾
小部件构建(构建上下文){
回程鼠标区(
onEnter:_递增输入,
onHover:\u updateLocation,
onExit:_递增退出,
孩子:扁平按钮(
颜色:颜色,白色,
textColor:Colors.teal[700],//悬停时文本颜色更改
形状:圆形矩形边框(
边界半径:边界半径。圆形(5),
边线(
颜色:Colors.teal[700],
),
),
按下:(){},
子项:文本(“登录”,样式:TextStyle(颜色:textColor),),
),
);
}
}
还有一个软件包也使用鼠标区域实现了这一点
例如:
HoverButton(
onpressed: () {
print('test');
},
color: Colors.green,
hoverColor: Colors.red,
hoverTextColor: Colors.blue,
child: Text('test'),
)
您可以更改按钮样式的
foregroundColor
属性,如下所示:
ElevatedButton.styleFrom().copyWith(
backgroundColor: MaterialStateProperty.resolveWith<Color?>(
(states) {
if (states.contains(MaterialState.hovered)) {
return Colors.blue;
} else if (states.contains(MaterialState.pressed)) {
return Colors.yellow;
}
return Colors.red;
},
),
foregroundColor: MaterialStateProperty.resolveWith<Color?>(
(states) {
if (states.contains(MaterialState.hovered)) {
return Colors.green;
}
return Colors.black;
},
),
);
ElevatedButton.styleFrom().copyWith(
backgroundColor:MaterialStateProperty.resolveWith(
(各国){
if(状态包含(材质状态悬停)){
返回颜色。蓝色;
}else if(states.contains(MaterialState.pressed)){
返回颜色。黄色;
}
返回颜色。红色;
},
),
foregroundColor:MaterialStateProperty.resolveWith(
(各国){
if(状态包含(材质状态悬停)){
返回颜色。绿色;
}
返回颜色。黑色;
},
),
);