Flutter时间控制器插件gg_time_controller的使用
Flutter时间控制器插件gg_time_controller的使用
GgTimeController
是一个用于媒体播放器的时间控制器插件,支持 play
、pause
、stop
、jumpTo
和 animateTo
方法。
特性
在媒体播放器应用中(如视频播放器),时间控制功能是必需的。我们需要能够播放、停止、快进和后退时间。这正是 GgTimeController
实现的功能。
- 按帧传递时间戳
- 开始、停止和暂停时传递时间戳
- 使用
animateTo
和jumpTo
跳转或动画到指定时间
示例
以下是一个完整的示例,演示了如何使用 GgTimeController
:
import 'dart:async';
import 'package:gg_time_controller/gg_time_controller.dart';
import 'package:gg_typedefs/gg_typedefs.dart';
void main() async {
void log(String str) => print('\n$str:');
final fiveFrames = Duration(
microseconds: ((GgTimeController.defaultFrameDuration * 5 * 1000 * 1000).toInt()),
);
/// 监听时间戳
void onTimeStamp(GgMilliseconds timeStamp) {
scheduleMicrotask(
() => print(' time: $timeStamp'),
);
}
/// 监听状态变化
void onStateChange(GgTransportState state) {
print(' state: ${state.toString().split('.').last}');
}
log('创建时间控制器');
final timeController = GgTimeController(onTimeStamp: onTimeStamp);
timeController.state.listen(onStateChange);
log('开始播放');
timeController.play();
log('等待五个帧');
await Future<void>.delayed(fiveFrames);
// 输出:
// state: playing
// time: 17
// time: 33
// time: 49
// time: 64
// time: 81
log('暂停播放');
timeController.pause();
// 输出:
// time: 85
log('等待五个帧 => 因为控制器已暂停,所以无输出');
await Future<void>.delayed(fiveFrames);
// 输出:
// state: paused
log('停止控制器。时间将重置为0');
timeController.stop();
await Future<void>.delayed(Duration.zero);
// 输出:
// state: stopped
// time: 0
log('跳转到10秒');
timeController.jumpTo(time: 10.0);
await Future<void>.delayed(Duration.zero);
// 输出:
// time: 1000000
log('现在再次播放');
timeController.play();
log('等待五个帧');
await Future<void>.delayed(fiveFrames);
timeController.pause();
// 输出:
// time: 10017
// time: 10033
// time: 10050
// time: 10065
// time: 10082
// time: 10083
// state: paused
// time: 11947
log('在100毫秒内动画到20秒');
await timeController.animateTo(
targetTime: 20.0,
animationDuration: 0.1,
);
await Future<void>.delayed(fiveFrames);
// 输出:
// state: animatingForward
// time: 13578
// time: 15107
// time: 16736
// time: 18255
// time: 19879
// time: 20000
log('在100毫秒内动画回10秒');
await timeController.animateTo(
targetTime: 10.0,
animationDuration: 0.1,
);
// 输出:
// state: paused
// state: animatingBackward
// time: 18179
// time: 16644
// time: 15001
// time: 13365
// time: 11825
// time: 10168
// time: 10000
// state: paused
}
更多关于Flutter时间控制器插件gg_time_controller的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间控制器插件gg_time_controller的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用gg_time_controller
插件的示例代码。这个插件通常用于选择时间,类似于一个时间选择器。
首先,你需要在你的pubspec.yaml
文件中添加gg_time_controller
依赖:
dependencies:
flutter:
sdk: flutter
gg_time_controller: ^latest_version # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
接下来,在你的Flutter项目中使用这个插件。下面是一个简单的示例,展示如何在一个页面中集成并使用gg_time_controller
:
import 'package:flutter/material.dart';
import 'package:gg_time_controller/gg_time_controller.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Time Controller Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TimePickerScreen(),
);
}
}
class TimePickerScreen extends StatefulWidget {
@override
_TimePickerScreenState createState() => _TimePickerScreenState();
}
class _TimePickerScreenState extends State<TimePickerScreen> {
DateTime _selectedTime = DateTime.now();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Time Picker Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Selected Time: ${_selectedTime.toLocal()}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
showTimePicker(
context: context,
initialTime: _selectedTime,
onConfirm: (selectedTime) {
setState(() {
_selectedTime = selectedTime;
});
},
);
},
child: Text('Pick a Time'),
),
],
),
),
);
}
// 使用gg_time_controller的时间选择器对话框
Future<void> showTimePicker({
required BuildContext context,
required DateTime initialTime,
required ValueChanged<DateTime> onConfirm,
}) async {
final TimeControllerController controller = TimeControllerController(
initialTime: initialTime,
onConfirm: onConfirm,
);
await showDialog<void>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Select Time'),
content: GGTimeController(
controller: controller,
),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('Cancel'),
),
TextButton(
onPressed: () {
controller.confirm();
Navigator.of(context).pop();
},
child: Text('Confirm'),
),
],
);
},
);
}
}
解释
- 依赖项:在
pubspec.yaml
中添加gg_time_controller
依赖。 - 主应用:在
MyApp
类中设置基本的MaterialApp。 - 时间选择器页面:在
TimePickerScreen
类中创建一个包含时间显示和按钮的页面。 - 时间选择器对话框:定义一个
showTimePicker
方法,该方法使用gg_time_controller
的GGTimeController
小部件来创建一个自定义的时间选择器对话框。
请注意,gg_time_controller
的具体使用方式可能会根据插件的最新版本有所不同,因此请务必查阅插件的官方文档或源代码以获取最新的使用方法和API。如果插件的API有所变动,上面的代码可能需要做相应的调整。