Flutter时间线展示插件timeline_list的使用
Flutter时间线展示插件timeline_list的使用
简介
timeline_list
是一个高度可定制的Flutter小部件,用于显示带有自定义标记、图标和灵活定位选项的垂直时间线。
注意:文档是使用大型语言模型创建的。如果您发现任何错误或拼写错误,请提交Pull Request或创建问题。
特性
- 🎯 三种时间线位置:
start
(左侧)、center
(居中)或end
(右侧) - 🎨 完全可定制的标记,可以使用任何小部件作为内容或图标
- 📍 灵活的图标对齐方式:
top
、center
或bottom
标记 - 🎯 中心时间线的单个标记定位
- 🔃 支持反转时间线顺序
- 📱 自定义滚动物理和控制器支持
安装
在您的项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
timeline_list: ^0.1.0
然后运行 flutter pub get
来安装包。
使用方法
简单的时间线
这是一个简单的例子,展示了如何创建一个基本的时间线:
import 'package:flutter/material.dart';
import 'package:timeline_list/timeline_list.dart';
class SimpleTimeline extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Simple timeline")),
body: Timeline(
children: [
Marker(child: Text("Step 1")),
Marker(child: Text("Step 2")),
Marker(child: Text("Step 3"))
],
),
);
}
}
引导示例
这是一个更高级的例子,展示了带有自定义图标的引导时间线:
import 'package:flutter/material.dart';
import 'package:timeline_list/timeline_list.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(primarySwatch: Colors.blue, useMaterial3: true),
initialRoute: '/',
routes: {
'/': (context) => ExampleDirectory(),
'/onboarding': (context) => OnboardingPage(),
'/simple': (context) => SimpleTimeline(),
},
);
}
}
class OnboardingPage extends StatelessWidget {
final checkIcon = Container(
width: 16,
height: 16,
decoration: BoxDecoration(shape: BoxShape.circle, color: Colors.green),
child: Icon(Icons.check, color: Colors.white, size: 12),
);
final emptyIcon = Container(
width: 16,
height: 16,
decoration: BoxDecoration(shape: BoxShape.circle, color: Colors.grey),
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Onboarding example")),
body: Column(children: [
Timeline.builder(
context: context,
markerCount: 10,
properties: TimelineProperties(
iconAlignment: MarkerIconAlignment.center,
iconSize: 16,
timelinePosition: TimelinePosition.start,
),
markerBuilder: (context, index) => Marker(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Step ${index + 1}"),
),
icon: index >= 8 ? emptyIcon : checkIcon,
position: MarkerPosition.left,
),
),
]),
);
}
}
class SimpleTimeline extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Simple timeline")),
body: Timeline(
children: [
Marker(child: Text("Step 1")),
Marker(child: Text("Step 2")),
Marker(child: Text("Step 3"))
],
),
);
}
}
class ExampleDirectory extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Timeline Examples")),
body: ListView(children: [
ListTile(
title: Text("Onboarding example"),
onTap: () => Navigator.pushNamed(context, '/onboarding'),
),
ListTile(
title: Text("Simple timeline"),
onTap: () => Navigator.pushNamed(context, '/simple'),
),
]),
);
}
}
自定义选项
时间线属性
timelinePosition
: 控制整体时间线位置 (start
,center
,end
)iconAlignment
: 设置图标相对于标记内容的对齐方式iconSize
: 定义标记图标的大小lineWidth
: 设置连接线的宽度lineColor
: 自定义连接线的颜色itemGap
: 控制标记之间的间距iconGap
: 设置图标与标记内容之间的间距
标记属性
child
: 标记的主要内容小部件icon
: 可选的自定义图标小部件position
: 中心时间线的标记位置 (left
,right
)onTap
: 可选的标记点击事件回调maxWidth
: 标记内容的最大宽度约束
示例代码
完整的示例代码可以在 GitHub仓库 中找到,包括:
- 带有自定义图标和小部件的完整功能时间线
- 简单的引导流程
希望这些信息能帮助您更好地理解和使用 timeline_list
插件!如果有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter时间线展示插件timeline_list的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间线展示插件timeline_list的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用timeline_list
插件来展示时间线的一个示例。timeline_list
是一个流行的Flutter插件,用于创建时间线视图。为了演示这个插件的使用,我们需要先确保在pubspec.yaml
文件中添加了该插件的依赖项。
1. 添加依赖项
在你的pubspec.yaml
文件中,添加以下依赖项:
dependencies:
flutter:
sdk: flutter
timeline_list: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖项。
2. 使用TimelineList
下面是一个完整的示例代码,展示了如何使用timeline_list
插件来创建一个简单的时间线视图。
import 'package:flutter/material.dart';
import 'package:timeline_list/timeline_list.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Timeline List Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TimelineScreen(),
);
}
}
class TimelineScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final List<TimelineEvent> events = [
TimelineEvent(
title: 'Event 1',
description: 'This is the first event in the timeline.',
icon: Icons.event,
color: Colors.blue,
time: DateTime.now().subtract(Duration(days: 1)),
),
TimelineEvent(
title: 'Event 2',
description: 'This is the second event in the timeline.',
icon: Icons.star,
color: Colors.green,
time: DateTime.now(),
),
TimelineEvent(
title: 'Event 3',
description: 'This is the third event in the timeline.',
icon: Icons.announcement,
color: Colors.red,
time: DateTime.now().add(Duration(days: 1)),
),
];
return Scaffold(
appBar: AppBar(
title: Text('Timeline List Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: TimelineList(
events: events,
indicatorStyle: TimelineIndicatorStyle(
color: Colors.grey[400]!,
size: 4.0,
),
lineStyle: TimelineLineStyle(
color: Colors.grey[400]!,
thickness: 2.0,
),
dotStyle: TimelineDotStyle(
color: Colors.grey[600]!,
size: 12.0,
),
connectorLineStyle: TimelineConnectorLineStyle(
color: Colors.grey[400]!,
thickness: 2.0,
length: 30.0,
),
eventCardStyle: TimelineEventCardStyle(
margin: EdgeInsets.symmetric(vertical: 8.0),
elevation: 4.0,
borderRadius: BorderRadius.circular(12.0),
),
eventContentBuilder: (context, event) {
return Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
elevation: 4.0,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(event.icon, color: event.color),
SizedBox(width: 8.0),
Text(event.title, style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold)),
],
),
SizedBox(height: 8.0),
Text(event.description, style: TextStyle(fontSize: 14.0)),
SizedBox(height: 8.0),
Text('Date: ${event.time.toLocal()}', style: TextStyle(fontSize: 12.0, color: Colors.grey)),
],
),
),
);
},
),
),
);
}
}
class TimelineEvent {
final String title;
final String description;
final IconData icon;
final Color color;
final DateTime time;
TimelineEvent({
required this.title,
required this.description,
required this.icon,
required this.color,
required this.time,
});
}
3. 解释
- TimelineEvent 类:定义了一个事件模型,包含标题、描述、图标、颜色和日期时间。
- TimelineScreen 类:构建了一个包含时间线列表的页面。
- TimelineList:使用
TimelineList
小部件来显示事件列表。indicatorStyle
:定义时间线指示器的样式。lineStyle
:定义时间线的样式。dotStyle
:定义时间线点的样式。connectorLineStyle
:定义连接线的样式。eventCardStyle
:定义事件卡片的样式。eventContentBuilder
:自定义事件内容的构建器。
这个示例展示了如何使用timeline_list
插件来创建一个包含多个事件的时间线视图。你可以根据需要自定义事件的内容和样式。