从开发通道构建版本 1.19.0–3.0.pre 开始,内置了对指针光标的支持。使用与下面相同的方法,不同之处在于应用于 Flutter 应用程序容器元素flt-glass-pane
。使用波纹管方法只会复制行为。
为了覆盖pointer
光标,您可以使用波纹管方法,但应用于flt-glass-pane
元素。
解决方法如下:
- 您必须设置一个id(例如app-container在应用程序的index.html模板的整个主体上)。
这就是您的index.html的样子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My awesome app</title>
</head>
<body id="app-container">
<script src="main.dart.js" type="application/javascript"></script>
</body>
</html>
- 接下来,您必须创建一个包装 dart 类。我称它为hand_cursor.dart:
import 'package:flutter_web/gestures.dart';
import 'package:flutter_web/widgets.dart';
import 'package:universal_html/html.dart' as html;
// see https://pub.dev/packages/universal_html
class HandCursor extends MouseRegion {
// get a reference to the body element that we previously altered
static final appContainer = html.window.document.getElementById('app-container');
HandCursor({Widget child}) : super(
onHover: (PointerHoverEvent evt) {
appContainer.style.cursor='pointer';
// you can use any of these:
// 'help', 'wait', 'move', 'crosshair', 'text' or 'pointer'
// more options/details here: http://www.javascripter.net/faq/stylesc.htm
},
onExit: (PointerExitEvent evt) {
// set cursor's style 'default' to return it to the original state
appContainer.style.cursor='default';
},
child: child
);
}
- 之后,无论您想在何处显示手形光标,都必须将元素包装在此 HandCursor 包装器中。请参阅下面的awesome_button.dart类:
import 'package:awesome_app/widgets/containers/hand_cursor.dart';
import 'package:flutter_web/material.dart';
import 'package:flutter_web/widgets.dart';
class AwesomeButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
HandCursor(
child: IconButton(
onPressed: () {
// do some magic
},
icon: Icon(Icons.star)
),
)
],
);
}
}
可以在这里找到一个简短的解释。
可以在此处找到更通用的更新,该更新适用于使用 Flutter 的主通道创建的新 Web 项目。
我希望它有所帮助。