Flutter可拖动评分条插件flutter_pannable_rating_bar的使用
Flutter可拖动评分条插件flutter_pannable_rating_bar的使用
引入一个适用于Flutter的新版评分条,提供了更高的灵活性和完全自定义的功能。与其它评分条不同的是,此评分条支持任何值的选择,而不仅仅是全星或半星的评分。点击、拖动和悬停手势均被无缝支持,以提供流畅的用户体验。
特性
- 支持分数值的评分。
- 高度定制化,可以调整评分小部件的大小、形状和颜色。
- 精确的命中测试,利用子部件的渲染对象来确定结果。
- 允许通过
tapOnly
、dragOnly
或tapAndDrag
选项过滤手势。 - 支持鼠标悬停时的评分报告。
- 基于Flutter内置的
Wrap
小部件构建,支持多种布局方式,并考虑了Wrap
属性如textDirection
和verticalDirection
。
开始使用
首先导入该库:
import 'package:flutter_pannable_rating_bar/flutter_pannable_rating_bar.dart';
使用方法
该小部件是无状态的,且非常灵活,可以轻松地操纵值并自定义PannableRatingBar
的显示。只需将提供的值通过onChanged
回调或onHover
回调传递给小部件,它就会自动调整每个评分小部件上的评分分布。
double rating = 0.0;
PannableRatingBar(
rate: rating,
items: List.generate(5, (index) =>
const RatingWidget(
selectedColor: Colors.yellow,
unSelectedColor: Colors.grey,
child: Icon(
Icons.star,
size: 48,
),
)),
onChanged: (value) { // 点击或拖动时更新评分值。
setState(() {
rating = value;
});
},
)
该小部件还支持通过onHover
回调在悬停时获取评分值。这在支持鼠标光标的设备上(包括桌面浏览器)效果最佳。
double rating = 0.0;
PannableRatingBar(
rate: rating,
items: List.generate(5, (index) =>
const RatingWidget(
selectedColor: Colors.yellow,
unSelectedColor: Colors.grey,
child: Icon(
Icons.star,
size: 48,
),
)),
onHover: (value) { // 悬停时更新评分值。
setState(() {
rating = value;
});
},
)
可以使用自定义的小部件作为评分指示器。具有完全的定制自由度,这些小部件不必在大小、颜色或其他方面保持一致。
double rating = 0.0;
PannableRatingBar(
rate: rating,
onChanged: (value) {
setState(() {
rating = value;
});
},
items: const [
RatingWidget(
selectedColor: Colors.yellow,
unSelectedColor: Colors.grey,
child: Icon(
Icons.star,
size: 48,
),
),
RatingWidget(
selectedColor: Colors.blue,
unSelectedColor: Colors.red,
child: Icon(
Icons.ac_unit,
size: 48,
),
),
RatingWidget(
selectedColor: Colors.purple,
unSelectedColor: Colors.amber,
child: Icon(
Icons.access_time_filled,
size: 48,
),
),
RatingWidget(
selectedColor: Colors.cyanAccent,
unSelectedColor: Colors.grey,
child: Icon(
Icons.abc,
size: 48,
),
),
RatingWidget(
selectedColor: Colors.tealAccent,
unSelectedColor: Colors.purple,
child: Icon(
Icons.accessibility_new_sharp,
size: 48,
),
),
],
)
double rating = 0;
PannableRatingBar(
rate: rating,
onChanged: (value){
setState((){
rating = value;
});
},
spacing: 20,
items: const [
RatingWidget(
selectedColor: Colors.blue,
child: Text(
"Pannable",
style: TextStyle(color: Colors.grey, fontSize: 40),
),
),
RatingWidget(
selectedColor: Colors.red,
child: Text(
"Rating",
style: TextStyle(color: Colors.grey, fontSize: 30),
),
),
RatingWidget(
selectedColor: Colors.amber,
child: Text(
"Bar",
style: TextStyle(color: Colors.grey, fontSize: 50),
),
),
],
),
该小部件利用了Flutter内置Wrap
小部件的布局能力,允许实现多种可能的布局。当绘制指示器时,会考虑Wrap
小部件的属性,例如textDirection
和verticalDirection
,从而为您提供更大的控制权,以达到最终的外观和感觉。
double rating = 0.0;
PannableRatingBar.builder(
rate: rating,
alignment: WrapAlignment.center,
spacing: 20,
runSpacing: 10,
itemCount: 20,
direction: Axis.vertical,
itemBuilder: (context, index) {
return const RatingWidget(
selectedColor: Colors.yellow,
unSelectedColor: Colors.grey,
child: Icon(
Icons.star,
size: 48,
),
);
},
onChanged: (value) {
setState(() {
rating = value;
});
},
)
根据其值自定义评分指示器的外观。
double rating = 0;
PannableRatingBar(
rate: rating,
spacing: 20,
onChanged: (value){
setState((){
rating = value;
});
},
items: [
RatingWidget(
selectedColor: rating <= 0.5 ? Colors.red : Colors.green,
unSelectedColor: Colors.grey,
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: rating <= 0.5
? const Icon(
Icons.sentiment_very_dissatisfied,
key: ValueKey("sad"),
size: 100,
)
: const Icon(
Icons.sentiment_satisfied,
key: ValueKey("happy"),
size: 100,
),
),
),
],
),
为了方便转换/修改评分值,库支持使用函数进行此类操作,作为PannableRatingBar
的一个参数。
返回null将导致当前评分值在所有回调中被跳过。
typedef RatingValueTransformer = double? Function(double value);
一些预建的RatingValueTransformer
包括:
// 四舍五入到最近的单个分数位。这也是`PannableRatingBar`使用的默认设置。
double singleFractionalValueTransformer(double value);
// 四舍五入到最近的.5。
double halfFractionalValueTransformer(double value);
// 保留原始评分值。
double rawValueTransformer(double value);
更多关于Flutter可拖动评分条插件flutter_pannable_rating_bar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter可拖动评分条插件flutter_pannable_rating_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_pannable_rating_bar
插件的一个示例代码案例。这个插件允许你创建一个可拖动的评分条,用户可以通过拖动来设置评分。
首先,你需要在你的pubspec.yaml
文件中添加flutter_pannable_rating_bar
依赖:
dependencies:
flutter:
sdk: flutter
flutter_pannable_rating_bar: ^最新版本号 # 请确保使用最新版本
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以这样使用flutter_pannable_rating_bar
:
import 'package:flutter/material.dart';
import 'package:flutter_pannable_rating_bar/flutter_pannable_rating_bar.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Pannable Rating Bar Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
double _rating = 0.0;
void _onRatingChanged(double rating) {
setState(() {
_rating = rating;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Pannable Rating Bar Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Rating: ${_rating.toStringAsFixed(1)}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
PannableRatingBar(
initialRating: _rating,
maxRating: 5,
iconSize: 30,
iconBuilder: (context, index) {
return Icon(
index == _rating.toInt() || (_rating - index.toDouble()).abs() < 0.5
? Icons.star
: Icons.star_border,
color: index == _rating.toInt() || (_rating - index.toDouble()).abs() < 0.5
? Colors.amber[800]
: Colors.grey,
);
},
onRatingChange: (rating) => _onRatingChanged(rating),
),
],
),
),
);
}
}
在这个示例中:
- 我们创建了一个简单的Flutter应用,其中包含一个评分条。
- 使用
PannableRatingBar
组件来显示评分条。 initialRating
属性设置了初始评分。maxRating
属性设置了评分的最大值。iconSize
属性设置了图标的大小。iconBuilder
属性允许我们自定义每个评分的图标。在这个例子中,我们根据评分来显示实心星或空心星。onRatingChange
回调函数在评分改变时被调用,并更新当前评分。
运行这个代码,你应该能看到一个可拖动的评分条,当你拖动时,上面的文本会显示当前的评分。
请确保你已经在pubspec.yaml
中正确添加了依赖,并且运行了flutter pub get
来安装它。