Flutter基于Anki SM2间隔重复优化算法插件dolphinsr_dart的使用

FFlutter基于Anki SM2间隔重复优化算法插件dolphinsr_dart的使用

DolphinSR_Dart 简介

Build Status

DolphinSR_Dart 是基于Yodaiken编写的JavaScript版本的DolphinSR算法的一个移植版本。它实现了间隔重复(Spaced Repetition),特别是采用了Anki对SM2算法的修改,包括:

  • 新卡片学习模式
  • 忘记卡片后的重新学习模式
  • 将自评等级从6个减少到4个
  • 将迟到因素纳入卡片调度
  • Anki默认配置选项

与Anki的算法相比,DolphinSR_Dart在以下方面有所不同:

  • 改进了对无序添加复习的支持(例如由于网络延迟)
  • 内部数据结构完全不同(DolphinSR_Dart主要采用函数式编程风格编写,以简化测试和调试,不依赖于存储计算的数据或任何SQL数据库)
  • 只有一种类型的卡片

安装

要使用此包,请在pubspec.yaml文件中添加如下依赖:

dependencies:
  dolphinsr_dart: latest_version

快速开始

下面是一个简单的例子来演示如何使用DolphinSR_Dart库。

示例代码

import 'package:dolphinsr_dart/dolphinsr_dart.dart';

void main() {
  final reviews = <Review>[];

  final dolphin = DolphinSR();

  // 添加主条目(Master Entries)
  dolphin.addMasters(<Master>[
    Master(
      id: '1',
      fields: <String>['คน', 'person'],
      combinations: <Combination>[
        Combination(front: <int>[0], back: <int>[1]),
        Combination(front: <int>[1], back: <int>[0]),
      ],
    ),
    Master(
      id: '2',
      fields: <String>['คบ', 'To date'],
      combinations: <Combination>[
        Combination(front: <int>[0], back: <int>[1]),
        Combination(front: <int>[1], back: <int>[0]),
      ],
    )
  ]);
  
  // 添加复习记录
  dolphin.addReviews(reviews);

  // 获取统计信息
  var stats = dolphin.summary(); // => { due: 0, later: 0, learning: 2, overdue: 0 }
  printStats(stats);

  // 获取下一张卡片进行复习
  var card = dolphin.nextCard()!;
  printCard(card);
  
  // 创建一个复习记录,并添加到复习列表中
  var review = Review(
      master: card.master,
      combination: card.combination,
      ts: DateTime.now(),
      rating: Rating.Hard);
  dolphin.addReviews(<Review>[review]);

  // 继续获取并处理更多的卡片...
  for (var i = 0; i < 5; i++) {
    card = dolphin.nextCard()!;
    printCard(card);
    
    review = Review(
        master: card.master,
        combination: card.combination,
        ts: DateTime.now(),
        rating: i % 2 == 0 ? Rating.Easy : Rating.Hard);
    dolphin.addReviews(<Review>[review]);

    stats = dolphin.summary();
    printStats(stats);
  }
}

// 辅助函数用于打印卡片信息
void printCard(DRCard card) {
  print(
      '${card.master}-${card.back}-${card.front}-${card.combination!.back}-${card.combination!.front} - ${card.lastReviewed} - ${card.dueDate}');
}

// 辅助函数用于打印统计数据
void printStats(Stats stats) {
  print('${stats.due}-${stats.later}-${stats.learning}-${stats.overdue}');
}

这段代码展示了如何创建一个DolphinSR实例,添加一些主条目(如单词及其翻译),然后通过循环模拟用户复习这些条目的过程。每次复习后,程序会根据用户的评分更新卡片的状态,并输出当前的学习进度统计信息。

请注意,实际应用中您可能需要更复杂的功能,比如持久化存储复习记录、支持更多种类型的卡片等。此外,还可以根据需要调整复习难度的评估逻辑,以更好地适应具体的应用场景。


更多关于Flutter基于Anki SM2间隔重复优化算法插件dolphinsr_dart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部