Flutter时间控制插件timed_widget_slider的使用

Flutter时间控制插件timed_widget_slider的使用

一个提供定时滑动功能的插件,可以自定义滑动速度和动画曲线。您可以选择一个动画曲线,详情请参考这里 -> https://api.flutter.dev/flutter/animation/Curves-class.html

它看起来像什么

EaseInCirc Linear Decelerate

使用方法

/// 参数可以配置以调整动画的速度并获得所需的效果。
/// 动画持续时间越长,滑动的部件就会越慢
TimedWidgetSlider(
    scrollCurve: Curves.linear, // 动画曲线
    onwardScrollDuration: const Duration(milliseconds: 2000), // 向前滑动的持续时间
    backwardScrollDuration: const Duration(milliseconds: 2000), // 向后滑动的持续时间
    scrollDurationOffset: const Duration(milliseconds: 500), // 滑动持续时间偏移
    widgets: /* 您的部件列表 */, // 需要滑动的部件列表
),

示例代码

/// 示例代码展示如何构建部件列表
/// 可以根据您的需求进行修改
List<Widget> widgetList = [];

for (var i = 0; i < 10; i++) {
    widgetList.add(
        OutlinedButton(
          onPressed: () {}, // 点击事件
          child: Text('Item $i'), // 文本内容
        ),
    );
    if (i < 9) {
      widgetList.add(
        const SizedBox(width: 10) // 添加间隔
      );
    }
}

// 构建带有动画效果的部件滑动器
TimedWidgetSlider(
    scrollCurve: Curves.linear,
    onwardScrollDuration: const Duration(milliseconds: 2000),
    backwardScrollDuration: const Duration(milliseconds: 2000),
    scrollDurationOffset: const Duration(milliseconds: 500),
    widgets: widgetList, // 使用上面创建的部件列表
),

更多关于Flutter时间控制插件timed_widget_slider的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter时间控制插件timed_widget_slider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 timed_widget_slider Flutter 插件的示例代码。这个插件允许你创建一个可拖动的滑块,用于控制时间。

首先,确保你已经在 pubspec.yaml 文件中添加了 timed_widget_slider 依赖:

dependencies:
  flutter:
    sdk: flutter
  timed_widget_slider: ^最新版本号 # 请替换为最新的版本号

然后运行 flutter pub get 来获取依赖。

接下来是一个简单的示例代码,展示如何使用 timed_widget_slider

import 'package:flutter/material.dart';
import 'package:timed_widget_slider/timed_widget_slider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Timed Widget Slider Example'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: MyTimedSlider(),
          ),
        ),
      ),
    );
  }
}

class MyTimedSlider extends StatefulWidget {
  @override
  _MyTimedSliderState createState() => _MyTimedSliderState();
}

class _MyTimedSliderState extends State<MyTimedSlider> {
  Duration _duration = Duration(minutes: 5); // 初始时间设置为5分钟

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(
          'Selected Time: ${_formatDuration(_duration)}',
          style: TextStyle(fontSize: 20),
        ),
        SizedBox(height: 20),
        TimedWidgetSlider(
          duration: _duration,
          onChanged: (Duration newDuration) {
            setState(() {
              _duration = newDuration;
            });
          },
          min: Duration(seconds: 0),
          max: Duration(hours: 1), // 最大时间设置为1小时
          step: Duration(seconds: 1), // 每秒一个步长
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10),
            color: Colors.grey[200],
          ),
          activeColor: Colors.blue,
          inactiveColor: Colors.grey[400],
          thumbColor: Colors.white,
          thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12),
          overlayShape: RoundSliderOverlayShape(overlayRadius: 24),
        ),
      ],
    );
  }

  String _formatDuration(Duration duration) {
    String twoDigits(int n) => n.toString().padLeft(2, '0');
    return '${twoDigits(duration.inHours)}:${twoDigits(duration.inMinutes % 60)}:${twoDigits(duration.inSeconds % 60)}';
  }
}

在这个示例中:

  1. TimedWidgetSlider 被用来创建一个可拖动的滑块,允许用户选择时间。
  2. _duration 状态变量保存当前选择的时间。
  3. 当用户拖动滑块时,onChanged 回调更新 _duration 的值,并触发 UI 重新构建。
  4. _formatDuration 方法用于将 Duration 对象格式化为 HH:MM:SS 格式的字符串,以便于显示。

这个示例展示了如何使用 timed_widget_slider 插件来创建一个简单的时间选择器。你可以根据需要进一步自定义和扩展这个示例。

回到顶部