Flutter时间线节点管理插件timeline_node的使用

Flutter时间线节点管理插件timeline_node的使用

插件简介

timeline_node 是一个用于创建时间线布局的小部件。它可以帮助开发者轻松实现带有时间线节点的时间线展示功能。

Pub Version

截图

以下是该插件在 Android 设备上的截图:

Android Screenshot

使用示例

以下是一个完整的示例代码,展示了如何使用 timeline_node 插件来创建时间线节点管理。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // 应用程序的根小部件
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'timeline_node',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePageTimelineObject {
  final TimelineNodeStyle style;
  final String message;

  HomePageTimelineObject({this.style, this.message});
}

class HomePage extends StatefulWidget {
  final List<HomePageTimelineObject> timelineObject = [
    HomePageTimelineObject(
        message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
        style: TimelineNodeStyle(lineType: TimelineNodeLineType.BottomHalf)),
    HomePageTimelineObject(
        message:
            'Maecenas non bibendum ante, et volutpat diam. Praesent eu interdum urna. Ut rhoncus, lectus sed condimentum dictum, dolor odio accumsan risus, eget malesuada enim lectus ut diam.',
        style: TimelineNodeStyle(
            lineType: TimelineNodeLineType.Full, lineColor: Colors.red)),
    HomePageTimelineObject(
        message:
            'Nullam tincidunt nunc libero, vel efficitur ex elementum quis. Nam non ex laoreet, imperdiet tellus vitae, finibus augue.',
        style: TimelineNodeStyle(
            lineType: TimelineNodeLineType.TopHalf, lineColor: Colors.green)),
    HomePageTimelineObject(
        message:
            'Ut fringilla dui posuere, lobortis mauris vitae, pretium ipsum.',
        style: TimelineNodeStyle(
            type: TimelineNodeType.Right,
            lineType: TimelineNodeLineType.BottomHalf,
            lineWidth: 5)),
    HomePageTimelineObject(
        message:
            'Ut fringilla dui posuere, lobortis mauris vitae, pretium ipsum.',
        style: TimelineNodeStyle(
            type: TimelineNodeType.Right,
            lineType: TimelineNodeLineType.Full,
            lineWidth: 5)),
    HomePageTimelineObject(
        message:
            'Praesent nulla sapien, vestibulum eget tincidunt ac, suscipit eget libero. Aliquam finibus sed nisi sed ornare.',
        style: TimelineNodeStyle(
            type: TimelineNodeType.Right,
            lineType: TimelineNodeLineType.TopHalf,
            lineWidth: 5)),
  ];

  HomePage({Key key}) : super(key: key);

  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Timeline Node Demo'),
      ),
      body: ListView.builder(
        itemCount: this.widget.timelineObject.length,
        itemBuilder: (context, index) {
          return TimelineNode(
            style: this.widget.timelineObject[index].style,
            indicator: SizedBox(
              width: 10,
              height: 10,
              child: ClipRRect(
                borderRadius: BorderRadius.circular(5),
                child: Container(
                  color: Colors.black,
                ),
              ),
            ),
            child: Padding(
              padding: EdgeInsets.all(4),
              child: Card(
                child: Padding(
                  padding: EdgeInsets.all(16),
                  child: Text(this.widget.timelineObject[index].message),
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

代码说明

  1. 导入必要的库

    import 'package:flutter/material.dart';
    import 'package:timeline_node/timeline_node.dart';
    
  2. 定义数据模型

    class HomePageTimelineObject {
      final TimelineNodeStyle style;
      final String message;
    
      HomePageTimelineObject({this.style, this.message});
    }
    
  3. 主应用结构

    void main() => runApp(MyApp());
    
  4. 定义时间线对象列表

    final List<HomePageTimelineObject> timelineObject = [
      HomePageTimelineObject(
          message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
          style: TimelineNodeStyle(lineType: TimelineNodeLineType.BottomHalf)),
      // 其他时间线对象...
    ];
    
  5. 构建时间线节点

    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text('Timeline Node Demo'),
        ),
        body: ListView.builder(
          itemCount: this.widget.timelineObject.length,
          itemBuilder: (context, index) {
            return TimelineNode(
              style: this.widget.timelineObject[index].style,
              indicator: SizedBox(
                width: 10,
                height: 10,
                child: ClipRRect(
                  borderRadius: BorderRadius.circular(5),
                  child: Container(
                    color: Colors.black,
                  ),
                ),
              ),
              child: Padding(
                padding: EdgeInsets.all(4),
                child: Card(
                  child: Padding(
                    padding: EdgeInsets.all(16),
                    child: Text(this.widget.timelineObject[index].message),
                  ),
                ),
              ),
            );
          },
        ),
      );
    }
    

更多关于Flutter时间线节点管理插件timeline_node的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter时间线节点管理插件timeline_node的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


timeline_node 是一个用于在 Flutter 应用中创建时间线节点的插件。它可以帮助你轻松地展示时间线、事件、任务等,适用于各种需要时间线展示的场景,如项目进度、历史事件、任务管理等。

安装

首先,你需要在 pubspec.yaml 文件中添加 timeline_node 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  timeline_node: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

timeline_node 提供了 TimelineNode 组件,你可以通过它来创建时间线节点。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Timeline Node Example'),
        ),
        body: TimelineExample(),
      ),
    );
  }
}

class TimelineExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        TimelineNode(
          position: TimelineNodePosition.start,
          child: ListTile(
            title: Text('Event 1'),
            subtitle: Text('This is the first event'),
          ),
        ),
        TimelineNode(
          position: TimelineNodePosition.middle,
          child: ListTile(
            title: Text('Event 2'),
            subtitle: Text('This is the second event'),
          ),
        ),
        TimelineNode(
          position: TimelineNodePosition.end,
          child: ListTile(
            title: Text('Event 3'),
            subtitle: Text('This is the third event'),
          ),
        ),
      ],
    );
  }
}

参数说明

  • position: 指定时间线节点的位置,可以是 TimelineNodePosition.startTimelineNodePosition.middleTimelineNodePosition.end
  • child: 时间线节点中显示的内容,通常是一个 ListTile 或其他自定义组件。

自定义样式

你可以通过 TimelineNodelineColorlineWidth 参数来自定义时间线的颜色和宽度:

TimelineNode(
  position: TimelineNodePosition.middle,
  lineColor: Colors.blue,
  lineWidth: 2.0,
  child: ListTile(
    title: Text('Custom Styled Event'),
    subtitle: Text('This event has a custom timeline style'),
  ),
),

复杂时间线

如果你需要展示更复杂的时间线,可以结合多个 TimelineNode 组件,并根据需要调整它们的位置和样式。

ListView(
  children: [
    TimelineNode(
      position: TimelineNodePosition.start,
      child: ListTile(
        title: Text('Project Start'),
        subtitle: Text('Project officially started'),
      ),
    ),
    TimelineNode(
      position: TimelineNodePosition.middle,
      child: ListTile(
        title: Text('Milestone 1'),
        subtitle: Text('First milestone achieved'),
      ),
    ),
    TimelineNode(
      position: TimelineNodePosition.middle,
      child: ListTile(
        title: Text('Milestone 2'),
        subtitle: Text('Second milestone achieved'),
      ),
    ),
    TimelineNode(
      position: TimelineNodePosition.end,
      child: ListTile(
        title: Text('Project End'),
        subtitle: Text('Project completed successfully'),
      ),
    ),
  ],
),
回到顶部