Flutter任务管理插件flutter_checklist的使用

Flutter任务管理插件flutter_checklist的使用

Pub Version

一个用于显示待办事项列表的小部件。

Screen recording of the example app

安装

请查看安装指南。

功能

  • 显示待办事项列表
  • 切换项目并编辑其文本
  • 重新排序项目
  • 添加新项目(在当前提交的项目之后或最后)
  • 删除项目
  • 将待办事项列表设置为只读

使用方法

ChecklistLine

ChecklistLine 类型是一个记录,表示待办事项列表中的一个条目。它包含该行的文本和是否已勾选的信息。

一个 ChecklistLine 的列表代表一个带有所有条目的待办事项列表。列表的顺序直接决定了待办事项列表中项目的顺序。

// 要显示的五个 ChecklistLine,包括它们的文本和是否已勾选
final lines = List.generate(
  5,
  (index) => (text: 'Line ${index + 1}', toggled: false),
);

// 当待办事项列表被修改时执行的函数,传入新的 ChecklistLine 列表
void onChanged(List<ChecklistLine> lines) {
  log(lines.toString());
}

// 待办事项小部件
Checklist(
  lines: lines,
  onChanged: onChanged,
);

Checklist

Checklist 小部件会将您的 ChecklistLine 列表显示为一个待办事项列表。

它需要传递两个参数:

  • 需要显示的 ChecklistLine 列表
  • 当列表发生任何修改时执行的回调函数,并附带新的 ChecklistLine 列表

可以通过将 enabled 参数设置为 false 来使待办事项列表变为只读,这将禁用对列表项的任何修改以及重新排序。

Checklist(
  lines: lines,
  onChanged: onChanged,
  enabled: false, // 设置为只读
);

本地化

嵌入式

此包支持本地化。要在您的应用中启用它,请在 MaterialApp 中添加本地化代理:

MaterialApp(
  localizationsDelegates: [
    ChecklistLocalizations.delegate,
    // 其他本地化代理,来自您的应用或其他包
  ],
);

目前支持的本地化语言(按字母顺序排列):

  • 英语
  • 法语

如果您希望添加新的本地化支持或改进现有的本地化,请打开一个问题

自定义

为了提供自己的本地化(替换嵌入的本地化或提供缺失的本地化),实现 ChecklistLocalizations 类(例如查看生成的本地化文件)并将其传递给 localizations 参数:

Checklist(
  lines: lines,
  onChanged: onChanged,
  localizations: CustomChecklistLocalizations(),
)

示例

请参阅示例应用。

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter_checklist/checklist.dart';

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

class MyApp extends StatelessWidget {
  MyApp({super.key});

  final lines = List.generate(
    5,
    (index) => (text: 'Line ${index + 1}', toggled: false),
  );

  void onChanged(List<ChecklistLine> lines) {
    log(lines.toString());
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      locale: Locale('en'),
      localizationsDelegates: [
        ...ChecklistLocalizations.localizationsDelegates,
      ],
      supportedLocales: [
        ...ChecklistLocalizations.supportedLocales,
      ],
      home: Scaffold(
        appBar: AppBar(
          title: const Text('flutter_checklist 示例'),
        ),
        body: Builder(
          builder: (context) {
            return Checklist(
              lines: lines,
              onChanged: onChanged,
            );
          },
        ),
      ),
    );
  }
}

更多关于Flutter任务管理插件flutter_checklist的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter任务管理插件flutter_checklist的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_checklist 是一个用于在 Flutter 应用中管理任务的插件。它可以帮助你轻松地创建、管理和显示任务列表。以下是如何使用 flutter_checklist 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_checklist: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_checklist 包:

import 'package:flutter_checklist/flutter_checklist.dart';

3. 使用 Checklist 小部件

flutter_checklist 提供了一个 Checklist 小部件,你可以直接在应用中使用它来显示和管理任务列表。

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Task> _tasks = [
    Task(title: 'Task 1', isCompleted: false),
    Task(title: 'Task 2', isCompleted: true),
    Task(title: 'Task 3', isCompleted: false),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Task Manager'),
      ),
      body: Checklist(
        tasks: _tasks,
        onTaskChanged: (Task task, bool isChecked) {
          setState(() {
            task.isCompleted = isChecked;
          });
        },
        onTaskDeleted: (Task task) {
          setState(() {
            _tasks.remove(task);
          });
        },
      ),
    );
  }
}

4. 自定义任务项

你可以通过传递 taskBuilder 参数来自定义任务项的显示方式:

Checklist(
  tasks: _tasks,
  taskBuilder: (BuildContext context, Task task, Function(bool) onChanged, Function() onDeleted) {
    return ListTile(
      title: Text(task.title),
      leading: Checkbox(
        value: task.isCompleted,
        onChanged: onChanged,
      ),
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: onDeleted,
      ),
    );
  },
  onTaskChanged: (Task task, bool isChecked) {
    setState(() {
      task.isCompleted = isChecked;
    });
  },
  onTaskDeleted: (Task task) {
    setState(() {
      _tasks.remove(task);
    });
  },
);

5. 添加新任务

你可以通过添加一个按钮来允许用户添加新任务:

floatingActionButton: FloatingActionButton(
  onPressed: () {
    setState(() {
      _tasks.add(Task(title: 'New Task', isCompleted: false));
    });
  },
  child: Icon(Icons.add),
),

6. 完整示例

以下是一个完整的示例,展示了如何使用 flutter_checklist 插件来创建一个简单的任务管理应用:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Checklist Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Task> _tasks = [
    Task(title: 'Task 1', isCompleted: false),
    Task(title: 'Task 2', isCompleted: true),
    Task(title: 'Task 3', isCompleted: false),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Task Manager'),
      ),
      body: Checklist(
        tasks: _tasks,
        taskBuilder: (BuildContext context, Task task, Function(bool) onChanged, Function() onDeleted) {
          return ListTile(
            title: Text(task.title),
            leading: Checkbox(
              value: task.isCompleted,
              onChanged: onChanged,
            ),
            trailing: IconButton(
              icon: Icon(Icons.delete),
              onPressed: onDeleted,
            ),
          );
        },
        onTaskChanged: (Task task, bool isChecked) {
          setState(() {
            task.isCompleted = isChecked;
          });
        },
        onTaskDeleted: (Task task) {
          setState(() {
            _tasks.remove(task);
          });
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            _tasks.add(Task(title: 'New Task', isCompleted: false));
          });
        },
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部