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),
),
),
)
],
),
),
),
);
}
}
更多关于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');
}
}