Flutter滑动条控制插件filling_slider的使用
Flutter滑动条控制插件filling_slider的使用
Filling Slider
这是一个类似iOS风格的滑动条小部件。
你可以在这里查看 Demo。
如何使用
简单垂直滑动条
FillingSlider()
简单水平滑动条
FillingSlider(
direction: FillingSliderDirection.horizontal
)
属性
你可以设置滑动条的初始值,范围在 [0.0, 1.0]
之间。
double initialValue
视觉属性
你可以更改滑动条的大小、方向和颜色。
double width
double height
Color color
Color fillColor
SliderDirection direction
回调属性
有两种方法可以响应滑动条值的变化。
Function onChange - 通知所有滑动条变化
Function onFinish - 通知变化结束
子组件属性
Widget child
Function childBuilder
示例代码
以下是一个完整的示例demo,展示了如何使用 filling_slider
插件创建垂直和水平滑动条,并结合动画效果。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:filling_slider/filling_slider.dart';
import 'package:rive/rive.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Filling Slider Demo',
home: MyHomePage(title: 'Filling Slider Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
Artboard? _riveArtboard;
@override
void initState() {
rootBundle.load('assets/volume.riv').then(
(data) {
final file = RiveFile.import(data);
setState(() => _riveArtboard = file.mainArtboard);
},
);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title!),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Vertical slider with Rive\'s animation'),
Padding(padding: EdgeInsets.only(bottom: 20)),
FillingSlider(
initialValue: 0.9,
onChange: onChangeWithRive,
child: SizedBox(
height: 60,
width: 60,
child: _riveArtboard == null
? Container()
: Rive(artboard: _riveArtboard!, fit: BoxFit.cover),
)),
Padding(padding: EdgeInsets.only(bottom: 40)),
Text('Horizontal slider with icons and AnimationSwitcher'),
Padding(padding: EdgeInsets.only(bottom: 20)),
FillingSlider(
initialValue: 0.9,
width: 150,
height: 40,
direction: FillingSliderDirection.horizontal,
childBuilder: (ctx, value) => AnimatedSwitcher(
layoutBuilder: (Widget? currentChild, List<Widget> previousChildren) {
return currentChild!;
},
duration: Duration(seconds: 1),
child: getIcon(value),
)),
],
),
),
);
}
void onChangeWithRive(double newVal, double old) {
List triggers = [1.0, 0.7, 0.3, 0.0];
var start = 3;
var end = 1;
for (var i = 0; i < triggers.length - 1; i++) {
if (newVal == 0) {
end = 0;
} else if (newVal <= triggers[i] && newVal >= triggers[i + 1]) {
end = 3 - i;
}
if (old == 0) {
start = 0;
} else if (old <= triggers[i] && old >= triggers[i + 1]) {
start = 3 - i;
}
}
_riveArtboard!.addController(SimpleAnimation('$start-$end'));
}
Widget getIcon(double newVal) {
return newVal > 0.5
? Icon(Icons.brightness_2_outlined, size: 20, key: ValueKey(1))
: Icon(Icons.brightness_1_outlined, size: 20, key: ValueKey(2));
}
}
这个示例展示了如何创建一个带有Rive动画的垂直滑动条和一个带有图标和动画切换器的水平滑动条。你可以根据需要调整代码中的属性和回调函数,以适应你的具体需求。
更多关于Flutter滑动条控制插件filling_slider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter滑动条控制插件filling_slider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,filling_slider
是一个 Flutter 插件,用于创建填充式滑动条(Filling Slider),这种滑动条在用户拖动滑块时可以显示填充效果。这对于需要用户选择范围或进度的情况非常有用。
以下是一个使用 filling_slider
插件的示例代码:
首先,确保在你的 pubspec.yaml
文件中添加 filling_slider
依赖:
dependencies:
flutter:
sdk: flutter
filling_slider: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,在你的 Dart 文件中使用 FillingSlider
组件。以下是一个完整的示例,展示如何在一个简单的 Flutter 应用中使用 filling_slider
:
import 'package:flutter/material.dart';
import 'package:filling_slider/filling_slider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Filling Slider Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
double _value = 0.5;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Filling Slider Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Value: $_value',
style: Theme.of(context).textTheme.headline4,
),
SizedBox(height: 20),
FillingSlider(
value: _value,
onChanged: (newValue) {
setState(() {
_value = newValue;
});
},
width: 300,
height: 50,
rangeSlider: false,
min: 0,
max: 1,
fillingColor: Colors.blue,
handlerColor: Colors.white,
backgroundColor: Colors.grey[300]!,
borderRadius: BorderRadius.circular(25),
),
],
),
),
);
}
}
代码解释
- 依赖添加:在
pubspec.yaml
中添加filling_slider
依赖。 - 导入包:在 Dart 文件中导入
filling_slider
包。 - 构建应用:
- 创建一个
MyApp
无状态组件,作为应用的根组件。 - 创建一个
MyHomePage
有状态组件,作为应用的主页。 - 在
_MyHomePageState
中定义一个_value
变量,用于存储滑动条的值。 - 使用
Center
和Column
组件来布局界面。 - 使用
Text
组件显示当前滑动条的值。 - 使用
FillingSlider
组件创建填充式滑动条,并配置相关属性:value
:滑动条当前的值。onChanged
:当滑动条值改变时的回调函数。width
和height
:滑动条的宽度和高度。rangeSlider
:是否为范围滑动条(这里设置为false
)。min
和max
:滑动条的最小值和最大值。fillingColor
:填充颜色。handlerColor
:滑块颜色。backgroundColor
:背景颜色。borderRadius
:圆角半径。
- 创建一个
通过这些代码,你就可以在 Flutter 应用中使用 filling_slider
插件来创建一个具有填充效果的滑动条。