Flutter点击悬停切换功能插件tap_hover_toggle的使用
Flutter点击悬停切换功能插件tap_hover_toggle的使用
一个Flutter插件,用于处理点击和悬停交互。此小部件允许您轻松检测其子部件上的点击和悬停事件,使其成为您的Flutter应用UI工具箱中的宝贵补充。
移动端 | 网页端
移动端 | 网页端 |
---|---|
特性
- 轻松将点击和悬停功能集成到您的Flutter应用中。
- 根据需要自定义小部件的外观和行为。
- 当小部件处于点击或悬停状态时,可以切换布尔状态。
安装
要在您的Flutter项目中使用此小部件,请将其添加到pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
tap_hover_toggle: ^0.0.1 # 使用pub.dev上的最新版本
然后运行flutter pub get
以安装该包。
使用方法
在您的Dart代码中导入该包:
import 'package:tap_hover_toggle/tap_hover_toggle.dart';
现在,您可以使用TapHoverToggle
小部件。以下是如何设置它的示例:
TapHoverToggle(
builder: (isHoverOrTap){
return YourContentWidget(); // 返回您想要显示的小部件
},
onClick: (){},
)
示例
TapHoverToggle(
builder: (isHoverOrTap){
return Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: isHoverOrTap ? const Color(0xFF1DA1F2) : Colors.white,
border: Border.all(
color: isHoverOrTap ? const Color(0xFF1DA1F2) : Colors.black12,
width: 1
)
),
padding: const EdgeInsets.all(12),
child: Icon(
FontAwesomeIcons.twitter,
size: 16,
color: isHoverOrTap ? Colors.white : Colors.black38
),
);
},
),
builder
: 您必须在此处传递您想要显示的小部件,并根据isHoverOrTap
状态的变化来定制小部件的外观和行为。onClick
: 您可以在此处处理点击事件。
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:tap_hover_toggle/tap_hover_toggle.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是您的应用程序的根节点。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Tap Hover Toggle Example',
debugShowCheckedModeBanner: false,
theme: ThemeData(useMaterial3: true, textTheme: GoogleFonts.latoTextTheme()),
home: const MyHomePage(title: 'Tap Hover Toggle Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text(widget.title),
),
body: Column(
children: [
const SizedBox(height: 30),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TapHoverToggle(
builder: (isHoverOrTap) {
return Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: isHoverOrTap
? const Color(0xFF4267B2)
: Colors.white,
border: Border.all(
color: isHoverOrTap
? const Color(0xFF4267B2)
: Colors.black12,
width: 1)),
padding: const EdgeInsets.all(12),
child: Icon(FontAwesomeIcons.facebookF,
size: 16,
color: isHoverOrTap ? Colors.white : Colors.black38),
);
},
),
const SizedBox(
width: 12,
),
TapHoverToggle(
builder: (isHoverOrTap) {
return Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: isHoverOrTap
? const Color(0xFF1DA1F2)
: Colors.white,
border: Border.all(
color: isHoverOrTap
? const Color(0xFF1DA1F2)
: Colors.black12,
width: 1)),
padding: const EdgeInsets.all(12),
child: Icon(FontAwesomeIcons.twitter,
size: 16,
color: isHoverOrTap ? Colors.white : Colors.black38),
);
},
),
const SizedBox(
width: 12,
),
TapHoverToggle(
builder: (isHoverOrTap) {
return Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: isHoverOrTap
? const Color(0xFF25D366)
: Colors.white,
border: Border.all(
color: isHoverOrTap
? const Color(0xFF25D366)
: Colors.black12,
width: 1)),
padding: const EdgeInsets.all(12),
child: Icon(FontAwesomeIcons.whatsapp,
size: 16,
color: isHoverOrTap ? Colors.white : Colors.black38),
);
},
),
const SizedBox(
width: 12,
),
TapHoverToggle(
builder: (isHoverOrTap) {
return Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: isHoverOrTap
? const Color(0xFFE60023)
: Colors.white,
border: Border.all(
color: isHoverOrTap
? const Color(0xFFE60023)
: Colors.black12,
width: 1)),
padding: const EdgeInsets.all(12),
child: Icon(FontAwesomeIcons.pinterest,
size: 16,
color: isHoverOrTap ? Colors.white : Colors.black38),
);
},
),
],
),
const SizedBox(height: 30),
SizedBox(
width: size.width * 0.8,
child: TapHoverToggle(
builder: (isHoverOrTap) {
return Container(
decoration: BoxDecoration(
borderRadius:
const BorderRadius.all(Radius.circular(8)),
color: isHoverOrTap ? null : Colors.blueAccent,
border:
Border.all(color: Colors.blueAccent, width: 1.5)),
padding: const EdgeInsets.symmetric(vertical: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Tap to Continue",
textAlign: TextAlign.center,
style: Theme.of(context)
.textTheme
.titleMedium!
.copyWith(
letterSpacing: 0.6,
fontWeight: FontWeight.w700,
color: isHoverOrTap
? Colors.blueAccent
: Colors.white,
height: 1.4)),
],
));
},
),
),
const SizedBox(height: 24),
SizedBox(
width: size.width * 0.8,
child: TapHoverToggle(
builder: (isHoverOrTap) {
return Image(
image: AssetImage(isHoverOrTap
? 'assets/images/bulb_on.JPEG'
: 'assets/images/bulb_off.JPEG'),
height: size.height * 0.3,
);
},
),
),
],
),
);
}
}
更多关于Flutter点击悬停切换功能插件tap_hover_toggle的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter点击悬停切换功能插件tap_hover_toggle的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 tap_hover_toggle
Flutter 插件的示例代码。这个插件允许你在点击和悬停之间切换功能,非常适合需要这种交互的应用场景。
首先,你需要在你的 pubspec.yaml
文件中添加这个插件的依赖:
dependencies:
flutter:
sdk: flutter
tap_hover_toggle: ^latest_version # 请确保使用最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示了如何使用 tap_hover_toggle
插件:
import 'package:flutter/material.dart';
import 'package:tap_hover_toggle/tap_hover_toggle.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Tap Hover Toggle Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool isHovered = false;
bool isTapped = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Tap Hover Toggle Demo'),
),
body: Center(
child: TapHoverToggle(
onTap: () {
setState(() {
isTapped = !isTapped;
});
print('Tapped: $isTapped');
},
onHover: (bool hovering) {
setState(() {
isHovered = hovering;
});
print('Hovering: $isHovered');
},
child: Container(
width: 200,
height: 200,
decoration: BoxDecoration(
color: isTapped ? Colors.green : isHovered ? Colors.lightBlueAccent : Colors.grey,
borderRadius: BorderRadius.circular(15),
),
child: Center(
child: Text(
isTapped ? 'Tapped' : isHovered ? 'Hovering' : 'Idle',
style: TextStyle(color: Colors.white, fontSize: 24),
),
),
),
),
),
);
}
}
代码解释:
- 依赖引入:在
pubspec.yaml
文件中引入tap_hover_toggle
插件。 - 主应用:创建
MyApp
和MyHomePage
小部件。 - 状态管理:在
_MyHomePageState
类中管理两个布尔状态变量isHovered
和isTapped
。 - TapHoverToggle 小部件:
onTap
回调在点击时触发,切换isTapped
状态。onHover
回调在悬停状态改变时触发,更新isHovered
状态。- 子小部件(一个容器)根据当前状态改变颜色和显示文本。
这个示例展示了如何使用 tap_hover_toggle
插件来处理点击和悬停事件,并根据这些事件更新界面。你可以根据实际需求进一步自定义和扩展这个示例。