Flutter Anki学习插件ankidroid_for_flutter的使用

Flutter Anki学习插件ankidroid_for_flutter的使用

该插件是Flutter对Java AnkiDroid API的封装。

安装

1. 在你的pubspec.yaml文件中添加此插件

ankidroid_for_flutter: <your version here>

2. 编辑你的项目的android/app/build.gradle

在文件末尾添加以下内容:

repositories {
    maven { url "https://jitpack.io" }
}

这是因为Gradle无法找到AnkiDroid Java API文件。

3. 编辑你的项目的android/app/src/main/AndroidManifest.xml

在打开的<manifest...>标签中,添加以下内容:

xmlns:tools="http://schemas.android.com/tools"

然后在<application...>标签中,添加以下内容:

tools:replace="android:label"

这行代码位于android:label="..."之上。这是因为在AnkiDroid Java API的AndroidManifest.xml文件中已经设置了标签值,但我们想使用自己的标签值,所以使用了tools:replace

使用

首先,你需要获取使用AnkiDroid API的权限:

await Ankidroid.askForPermission();

然后,通过运行以下代码创建一个带有独立隔离区的AnkiDroid实例:

final ankiIsolate = await Ankidroid.createAnkiIsolate();

创建完实例后,可以使用以下方法:

anki.addNote(modelId, deckId, fields, tags);
anki.addNotes(modelId, deckId, fieldsList, tagsList);
anki.addMedia(bytes, preferredName, mimeType);
anki.findDuplicateNotesWithKey(mid, key);
anki.findDuplicateNotesWithKeys(mid, keys);
anki.getNoteCount(mid);
anki.updateNoteTags(noteId, tags);
anki.updateNoteFields(noteId, fields);
anki.getNote(noteId);
anki.previewNewNote(mid, flds);
anki.addNewBasicModel(name);
anki.addNewBasic2Model(name);
anki.addNewCustomModel(name, fields, cards, qfmt, afmt, css, did, sortf);
anki.currentModelId();
anki.getFieldList(modelId);
anki.modelList();
anki.getModelList(minNumFields);
anki.getModelName(mid);
anki.addNewDeck(deckName);
anki.selectedDeckName();
anki.deckList();
anki.getDeckName(did);
anki.apiHostSpecVersion();

如果你确定不再使用ankiIsolate,则应该终止隔离区:

anki.killIsolate();

示例代码

下面是一个完整的示例代码,展示了如何使用ankidroid_for_flutter插件:

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Ankidroid? anki;
  String ankiText = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    Ankidroid.createAnkiIsolate().then((value) => setState(() => anki = value));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Ankidroid'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: [
              ElevatedButton(
                onPressed: () async {
                  await Ankidroid.askForPermission();
                },
                child: const Text("Ask for permission")
              ),
              ElevatedButton(
                onPressed: anki == null ? null : () async {
                  final result = await anki!.deckList();

                  setState(() => ankiText = result.asValue?.value.toString() ?? result.asError!.error.toString());
                },
                child: anki == null ? const CircularProgressIndicator() :  const Text('Get Anki Data', style: TextStyle(fontSize: 42))
              ),
              SizedBox(
                height: 400,
                child: SingleChildScrollView(
                  child: Text(
                    ankiText,
                    style: const TextStyle(fontSize: 42),
                  ),
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}
1 回复

更多关于Flutter Anki学习插件ankidroid_for_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ankidroid_for_flutter 是一个用于在 Flutter 应用中集成 AnkiDroid 功能的插件。该插件允许你在 Flutter 应用中使用 AnkiDroid 的核心功能,例如创建卡片、同步卡片、查看学习进度等。

安装插件

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

dependencies:
  ankidroid_for_flutter: ^0.1.0  # 请使用最新版本

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

使用插件

1. 初始化插件

在你的 Flutter 应用中,首先需要初始化 ankidroid_for_flutter 插件。通常可以在 main.dart 中进行初始化:

import 'package:ankidroid_for_flutter/ankidroid_for_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await AnkiDroidForFlutter.initialize();
  runApp(MyApp());
}

2. 创建卡片

你可以使用 AnkiDroidForFlutter 的 API 来创建新的卡片。例如:

import 'package:ankidroid_for_flutter/ankidroid_for_flutter.dart';

Future<void> createCard() async {
  try {
    await AnkiDroidForFlutter.createCard(
      deckName: 'My Deck',
      front: 'Front of the card',
      back: 'Back of the card',
    );
    print('Card created successfully');
  } catch (e) {
    print('Failed to create card: $e');
  }
}

3. 同步卡片

你可以使用 AnkiDroidForFlutter 的同步功能来同步你的卡片:

import 'package:ankidroid_for_flutter/ankidroid_for_flutter.dart';

Future<void> syncCards() async {
  try {
    await AnkiDroidForFlutter.sync();
    print('Cards synced successfully');
  } catch (e) {
    print('Failed to sync cards: $e');
  }
}

4. 获取学习进度

你还可以获取当前的学习进度:

import 'package:ankidroid_for_flutter/ankidroid_for_flutter.dart';

Future<void> getStudyProgress() async {
  try {
    final progress = await AnkiDroidForFlutter.getStudyProgress();
    print('Study progress: $progress');
  } catch (e) {
    print('Failed to get study progress: $e');
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!