Flutter时间线展示插件scrollable_timeline的使用
Flutter时间线展示插件scrollable_timeline的使用
概述
scrollable_timeline
是一个可以滚动和拖动的时间轴小部件,可以通过外部时间流驱动。例如,它可以用于显示当前正在播放的YouTube视频的时间。多个时间轴可以保持同步,并在任意一个时间轴被拖动时自动停止。
示例
这里有三个可运行的示例,已在移动设备和Web上进行了测试。以下是一个在Android设备上录制的最完整的示例:
示例代码链接
安装
安装方法可以在包页面的安装部分找到。
使用示例
ScrollableTimeline(
lengthSecs: 100, // 总秒数
stepSecs: 2, // 时间步长
height: 120, // 时间轴的高度
rulerOutsidePadding: 10, // 刻度线外边距
showCursor: true, // 是否显示中央游标
showMinutes: true, // 是否显示分钟和秒
backgroundColor: Colors.lightBlue.shade50, // 背景色
activeItemTextColor: Colors.blue.shade800, // 活动项文本颜色
itemTextColor: Colors.blue.shade300, // 文本颜色
onDragEnd: (double t) {
print("*FLT* drag detected for ScrollableTimelineF to target time $t");
} // 拖动结束回调
)
构造函数参数参考
参数 | 默认值 | 描述 |
---|---|---|
height |
double 时间轴的高度 |
|
backgroundColor |
Colors.white |
时间轴的背景色 |
lengthSecs |
int 显示在时间轴上的总秒数 |
|
stepSecs |
int 时间轴上各项目之间的步长 |
|
shownSecsMultiples |
1 |
int 显示刻度线之间的时间间隔 |
itemExtent |
60 |
int 每个时间标记项目的宽度(包含分钟和秒的文本) |
itemTextColor |
Colors.grey |
Color 时间轴上分钟和秒文本的颜色 |
showMinutes |
true |
bool 是否同时显示分钟和秒 |
showCursor |
true |
bool 是否显示中央游标指示当前选中的时间 |
cursorColor |
Colors.red |
Color 中央游标指示当前选中的时间的颜色 |
rulerSize |
8 |
double 刻度线的大小 |
rulerOutsidePadding |
10 |
double 刻度线的外边距:顶部用于顶部刻度线,底部用于底部刻度线 |
rulerInsidePadding |
5 |
double 刻度线的内边距:底部用于顶部刻度线,顶部用于底部刻度线 |
timeStream |
null |
Stream? 可选的时间值流。当接收到一个值时,时间轴会滚动到该时间值。 |
onDragStart |
回调当用户开始拖动时间轴时,用当前时间值调用。拖动状态下忽略时间流更新。 | |
onDragEnd |
回调当用户停止拖动时间轴时,用选中的时间值调用。 |
参数图例
- 刻度线外边距
- 刻度线大小
- 刻度线内边距
- 分钟文本
- 秒文本
- 每个时间标记项目的宽度
- 游标
许可证
版权 2022 Dario Elyasy,根据BSD 3-Clause License授权。
示例代码
import 'package:flutter/material.dart';
import 'pages/basic_example_page.dart';
import 'pages/expandable_example_page.dart';
import 'pages/youtube_example_page.dart';
void main() => runApp(MyApp());
class RouteNames {
static const String root = "/";
static const String simple = "/simple";
static const String expandable = "/expandable";
static const String youtube = "/youtube";
}
class MyApp extends StatelessWidget {
// 这是你的应用的根小部件。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Scrollable Timeline Demo',
initialRoute: RouteNames.root,
routes: {
RouteNames.root: (context) => MainScreen(),
RouteNames.simple: (context) => BasicExamplePage(),
RouteNames.expandable: (context) => ExpandableExamplePage(),
RouteNames.youtube: (context) => YoutubeExamplePage(),
},
debugShowCheckedModeBanner: true,
theme: ThemeData(
primarySwatch: Colors.green,
),
);
}
}
class MainScreen extends StatelessWidget {
final ButtonStyle btnStyle = ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20),
backgroundColor: Colors.green,
);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("ScrollableTimeline example")),
body: Center(
child: Column(
children: [
const SizedBox(height: 10),
ElevatedButton(
style: btnStyle,
onPressed: () {
Navigator.pushNamed(context, RouteNames.simple);
},
child: Text("简单示例"),
),
const SizedBox(height: 10),
ElevatedButton(
style: btnStyle,
onPressed: () {
Navigator.pushNamed(context, RouteNames.expandable);
},
child: Text("可展开示例"),
),
const SizedBox(height: 10),
ElevatedButton(
style: btnStyle,
onPressed: () {
Navigator.pushNamed(context, RouteNames.youtube);
},
child: Text("YouTube示例"),
),
],
),
),
);
}
}
更多关于Flutter时间线展示插件scrollable_timeline的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间线展示插件scrollable_timeline的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用scrollable_timeline
插件来展示时间线的示例代码。这个插件可以帮助你创建一个可滚动的时间线视图,非常适合展示历史数据或事件。
首先,你需要在你的pubspec.yaml
文件中添加scrollable_timeline
依赖:
dependencies:
flutter:
sdk: flutter
scrollable_timeline: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤创建一个时间线视图:
- 导入必要的包。
- 创建一个时间线数据模型。
- 使用
ScrollableTimeline
组件来展示时间线。
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:scrollable_timeline/scrollable_timeline.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Scrollable Timeline Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TimelineScreen(),
);
}
}
class TimelineScreen extends StatelessWidget {
// 创建一个时间线数据模型
final List<TimelineEvent> timelineEvents = [
TimelineEvent(
title: 'Event 1',
date: DateTime(2023, 1, 1),
description: 'This is the first event.',
color: Colors.blue,
),
TimelineEvent(
title: 'Event 2',
date: DateTime(2023, 3, 15),
description: 'This is the second event.',
color: Colors.green,
),
TimelineEvent(
title: 'Event 3',
date: DateTime(2023, 6, 10),
description: 'This is the third event.',
color: Colors.orange,
),
// 可以添加更多事件
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Scrollable Timeline Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: ScrollableTimeline(
events: timelineEvents,
eventBuilder: (context, event) {
return TimelineCard(
title: Text(event.title),
date: Text(DateFormat('MMMM d, yyyy').format(event.date)),
content: Text(event.description),
color: event.color,
);
},
connectorBuilder: (context, event, previousEvent, nextEvent) {
return TimelineConnector(
color: event.color,
lineWidth: 4.0,
lineType: TimelineConnectorType.continuous,
);
},
),
),
);
}
}
// 定义时间线事件的数据模型
class TimelineEvent {
final String title;
final DateTime date;
final String description;
final Color color;
TimelineEvent({
required this.title,
required this.date,
required this.description,
required this.color,
});
}
// 自定义时间线卡片
class TimelineCard extends StatelessWidget {
final String title;
final String date;
final String content;
final Color color;
TimelineCard({
required this.title,
required this.date,
required this.content,
required this.color,
});
@override
Widget build(BuildContext context) {
return Card(
color: color,
elevation: 4.0,
margin: EdgeInsets.symmetric(vertical: 16.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16.0),
),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 8.0),
Text(
date,
style: TextStyle(fontSize: 14, color: Colors.grey),
),
SizedBox(height: 16.0),
Text(
content,
style: TextStyle(fontSize: 16),
),
],
),
),
);
}
}
在这个示例中,我们定义了一个TimelineEvent
类来表示时间线中的每个事件,并创建了一个包含这些事件的列表。然后,我们使用ScrollableTimeline
组件来展示这些事件,每个事件通过eventBuilder
回调来构建自定义的TimelineCard
。
TimelineCard
是一个简单的卡片组件,包含了事件的标题、日期和描述,以及一个自定义的背景颜色。
希望这个示例能帮你理解如何在Flutter中使用scrollable_timeline
插件来创建时间线视图。