Flutter圆形进度指示器插件circular的使用
Flutter圆形进度指示器插件circular的使用
简介
circular_slider
是一个用于Flutter应用中的圆形滑块和查看器插件。它允许用户在特定范围内选择值,并以圆形滑块的形式显示这些值。
特性
- 在特定范围内选择值
- 以圆形滑块形式显示值
开始使用
添加包
首先,在您的 pubspec.yaml
文件中添加 circular
包:
flutter pub add circular
导入包
在需要使用的 Dart 文件中导入该包:
import 'package:circular/circular.dart';
使用方法
圆形滑块 (Circular Slider)
CircularSlider(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(200),
boxShadow: const [
BoxShadow(
offset: Offset(-10, -10),
color: Colors.white,
blurRadius: 20,
spreadRadius: 1),
BoxShadow(
offset: Offset(10, 10),
color: Color.fromARGB(255, 158, 158, 158),
blurRadius: 20,
spreadRadius: 1)
]),
maxValue: 100,
radius: 100,
child: Text(
value.toString(),
style: TextStyle(fontSize: 30),
),
color: Color(0xffEEEEEE),
sliderColor: Color(0xff62CBDA),
unSelectedColor: Color(0xffD7DEE7),
onDrag: (value) {
setState(() {
this.value = value;
});
},
)
圆形查看器 (Circular Viewer)
CircularViewer(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(200),
boxShadow: const [
BoxShadow(
offset: Offset(-10, -10),
color: Colors.white,
blurRadius: 20,
spreadRadius: 1),
BoxShadow(
offset: Offset(10, 10),
color: Color.fromARGB(255, 158, 158, 158),
blurRadius: 20,
spreadRadius: 1)
]),
value: 50,
maxValue: 100,
radius: 100,
textStyle: TextStyle(fontSize: 30),
color: Color(0xffEEEEEE),
sliderColor: Color(0xff62CBDA),
unSelectedColor: Color(0xffD7DEE7),
)
完整示例代码
以下是一个完整的示例代码,展示了如何使用 CircularSlider
和 CircularViewer
:
import 'package:flutter/material.dart';
import 'package:circular/circular.dart';
void main() {
runApp(const MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(body: Center(child: Home())),
));
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
int angle = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
color: const Color(0xffEEEEEE),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
SizedBox(
width: 200, //! 这个宽度不应小于
height: 200,
child: CircularSlider(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(200),
boxShadow: const [
BoxShadow(
offset: Offset(-10, -10),
color: Colors.white,
blurRadius: 20,
spreadRadius: 1),
BoxShadow(
offset: Offset(10, 10),
color: Color.fromARGB(255, 158, 158, 158),
blurRadius: 20,
spreadRadius: 1)
]),
maxValue: 100,
radius: 100, //! 这个值乘以2 (SizedBox的宽高 >= 半径 * 2)
child: Text(
angle.toString(),
style: const TextStyle(fontSize: 30),
),
color: const Color(0xffEEEEEE),
sliderColor: const Color(0xff62CBDA),
unSelectedColor: const Color(0xffD7DEE7),
onDrag: (angle) {
setState(() {
this.angle = angle;
});
},
),
),
CircularViewer(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(200),
boxShadow: const [
BoxShadow(
offset: Offset(-10, -10),
color: Colors.white,
blurRadius: 20,
spreadRadius: 1),
BoxShadow(
offset: Offset(10, 10),
color: Color.fromARGB(255, 158, 158, 158),
blurRadius: 20,
spreadRadius: 1)
]),
value: 50,
maxValue: 100,
radius: 100,
textStyle: const TextStyle(fontSize: 30),
color: const Color(0xffEEEEEE),
sliderColor: const Color(0xff62CBDA),
unSelectedColor: const Color(0xffD7DEE7),
)
],
),
alignment: Alignment.center,
),
),
);
}
}
额外信息
- 故事: 作者在制作了魔幻圆圈后,决定将其功能化,因此创建了这个包。
- 贡献: 欢迎任何贡献!
- 许可证: MIT LICENSE
希望这篇指南能帮助您快速上手并使用 circular_slider
插件。如果您有任何问题或建议,请随时联系开发者或在GitHub上提交问题。
更多关于Flutter圆形进度指示器插件circular的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter圆形进度指示器插件circular的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用circular_progress_indicator
插件来创建圆形进度指示器的示例代码。请注意,circular_progress_indicator
是一个假定的插件名称,因为在Flutter的官方插件库中,通常使用circular_progress_bar
或者通过自定义绘制来实现类似的功能。不过,为了符合你的要求,我会展示一个自定义圆形进度指示器的代码示例。
首先,你需要在你的pubspec.yaml
文件中添加依赖(虽然这里我们自定义实现,但通常插件的使用会需要这一步):
dependencies:
flutter:
sdk: flutter
# 如果有相关插件,会在这里添加,例如:
# circular_progress_indicator: ^x.y.z
然后,在你的Flutter项目中创建一个自定义的圆形进度指示器。以下是一个简单的实现:
import 'package:flutter/material.dart';
import 'dart:math' as math;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Circular Progress Indicator'),
),
body: Center(
child: CircularProgressIndicatorWidget(
progress: 0.75, // 设置进度值,0.0 到 1.0 之间
strokeWidth: 8.0,
backgroundColor: Colors.grey[300]!,
progressColor: Colors.blue,
),
),
),
);
}
}
class CircularProgressIndicatorWidget extends StatelessWidget {
final double progress;
final double strokeWidth;
final Color backgroundColor;
final Color progressColor;
CircularProgressIndicatorWidget({
required this.progress,
required this.strokeWidth,
required this.backgroundColor,
required this.progressColor,
});
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: CircularProgressPainter(
progress: progress,
strokeWidth: strokeWidth,
backgroundColor: backgroundColor,
progressColor: progressColor,
),
size: Size.square(200.0), // 你可以根据需要调整大小
);
}
}
class CircularProgressPainter extends CustomPainter {
final double progress;
final double strokeWidth;
final Color backgroundColor;
final Color progressColor;
CircularProgressPainter({
required this.progress,
required this.strokeWidth,
required this.backgroundColor,
required this.progressColor,
});
@override
void paint(Canvas canvas, Size size) {
final Paint backgroundPaint = Paint()
..color = backgroundColor
..style = PaintingStyle.stroke
..strokeWidth = strokeWidth;
final Paint progressPaint = Paint()
..color = progressColor
..style = PaintingStyle.stroke
..strokeWidth = strokeWidth
..strokeCap = StrokeCap.round;
final double radius = (size.width - strokeWidth) / 2;
final Rect rect = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: radius);
// 画背景圆
canvas.drawCircle(rect.center, radius, backgroundPaint);
// 计算进度圆弧的起始和结束角度(以弧度为单位)
final double startAngle = -math.pi / 2;
final double sweepAngle = progress * 2 * math.pi;
// 画进度圆弧
canvas.drawArc(rect, startAngle, sweepAngle, false, progressPaint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return oldDelegate != this;
}
}
在这个示例中,我们创建了一个自定义的CircularProgressIndicatorWidget
,它使用CustomPaint
和CustomPainter
来绘制一个圆形的进度指示器。你可以通过调整progress
、strokeWidth
、backgroundColor
和progressColor
来定制进度指示器的外观。
这个自定义的圆形进度指示器可以像其他Flutter组件一样在你的应用中使用,只需将其添加到你的widget树中即可。