Flutter牛津词典查询插件oxford_dictionary的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter 牛津词典查询插件 oxford_dictionary 的使用

Oxford Dictionary API Wrapper in Dart

该包正在开发中,并未包含所有 API 功能。欢迎贡献!

Oxford Dictionaries API 提供了一种简单的方法来访问强大的词汇数据(单词、定义、翻译、音频发音、同义词、反义词、词性等),以在您的应用和网站中使用。

为了测试包的可靠性,在 test/fixtures/{entries,lemmas}/ 文件夹中保存了 100 个请求及其相应的响应。如果您遇到任何空值错误,请在存储库的 Issues 页面上打开一个问题。

查看此项目的贡献指南。

阅读 Oxford Dictionaries 文档

开始使用

首先,克隆项目仓库:

git clone git@github.com:rIIh/oxford-dictionary.git && cd oxford-dictionary

然后安装依赖:

flutter pub get

最后运行构建脚本:

flutter pub run build_runner build

如何使用

请参阅示例文件以获取更多用例信息。

void main() async {
  final dictionary = OxfordDictionary(
    'en',
    Platform.environment['APP_ID'],
    Platform.environment['APP_KEY'],
  );

  // 查询单词定义
  final word = await dictionary.entries.search(wordString);

  // 获取短语
  final phrases = word.phrases.values
      .map((phrases) => phrases)
      .expand((phrases) => phrases)
      .toList();

  // 获取发音
  final pronunciations = word.variants.values
      .map((e) => e.map((e) => e.pronunciations))
      .expand((pronunciations) => pronunciations)
      .toList();

  // 获取词义
  final senses = word.variants.values
      .map((variants) => variants.map((variant) => variant.senses))
      .expand((senses) => senses)
      .toList();

  // 获取定义
  final definitions = senses
      .map((e) => e.map((e) => e.definitions))
      .expand((definitions) => definitions)
      .toList();

  // 获取子词义
  final subSenses = senses
      .map((e) => e.map((e) => e.subSenses))
      .expand((subSenses) => subSenses)
      .toList();
}

完整示例代码

以下是完整的示例代码,展示了如何使用插件进行查询并处理返回的数据。

import 'dart:io';

import 'package:http/http.dart' as http;
import 'package:oxford_dictionary/oxford_dictionary.dart';

void main() {
  find('programming').then((word) {});
}

Future<Word?> find(String wordString, [http.Client? client]) async {
  final dictionary = OxfordDictionary(
    'en',
    Platform.environment['APP_ID'] ?? 'test_app_id',
    Platform.environment['APP_KEY'] ?? 'test_app_key',
    client: client,
  );

  // 查询单词定义
  final word = await dictionary.entries.search(wordString).then((value) => value!);

  print(word);

  // 获取短语
  final phrases = word.phrases.values
      .map((phrases) => phrases)
      .expand((phrases) => phrases)
      .toList();

  // 获取发音
  final pronunciations = word.variants.values
      .map((e) => e.map((e) => e.pronunciations))
      .expand((pronunciations) => pronunciations)
      .toList();

  // 获取词义
  final senses = word.variants.values
      .map((variants) => variants.map((variant) => variant.senses))
      .expand((senses) => senses)
      .toList();

  // 获取定义
  final definitions = senses
      .map((e) => e.map((e) => e.definitions))
      .expand((definitions) => definitions)
      .toList();

  // 获取子词义
  final subSenses = senses
      .map((e) => e.map((e) => e.subSenses))
      .expand((subSenses) => subSenses)
      .toList();

  print([phrases, pronunciations, senses, definitions, subSenses].join('\n'));

  return word;
}

Future<Lemmas?> findLemmas(String wordString, [http.Client? client]) async {
  final dictionary = OxfordDictionary(
    'en',
    Platform.environment['APP_ID'] ?? 'test_app_id',
    Platform.environment['APP_KEY'] ?? 'test_app_key',
    client: client,
  );

  final lemmas = await dictionary.lemmas.search(wordString).then((value) => value!);

  print(lemmas);

  for (final inflection in lemmas.inflections.entries) {
    final category = inflection.key;
    final inflectionsByCategory = inflection.value;

    print("Searching words defenitions for inflections of ${wordString} for ${category.text} category");

    final wordsForCategory = await Future.wait(
      inflectionsByCategory.map((e) => find(e.text)).toList(),
    );

    print(wordsForCategory.whereType<Word>().map((e) => e.variants).join(', '));
  }

  return lemmas;
}

更多关于Flutter牛津词典查询插件oxford_dictionary的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter牛津词典查询插件oxford_dictionary的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个使用Flutter的oxford_dictionary插件进行牛津词典查询的示例代码。这个插件允许你在Flutter应用中集成牛津词典的功能,从而可以查询单词的定义和发音等信息。

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

dependencies:
  flutter:
    sdk: flutter
  oxford_dictionary: ^最新版本号 # 请替换为实际的最新版本号

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

接下来,是一个简单的Flutter应用示例,它展示了如何使用oxford_dictionary插件来查询单词的定义:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Oxford Dictionary Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final OxfordDictionary _dictionary = OxfordDictionary();
  String _query = '';
  String _result = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Oxford Dictionary Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter a word',
              ),
              onChanged: (value) {
                setState(() {
                  _query = value;
                });
              },
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  _result = '';
                });
                try {
                  final result = await _dictionary.getDefinitions(_query);
                  if (result.isNotEmpty) {
                    setState(() {
                      _result = result.first.definition;
                    });
                  } else {
                    setState(() {
                      _result = 'No definitions found.';
                    });
                  }
                } catch (e) {
                  setState(() {
                    _result = 'Error: ${e.message}';
                  });
                }
              },
              child: Text('Search'),
            ),
            SizedBox(height: 16),
            Text(
              _result,
              style: TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项:

  1. API Keyoxford_dictionary插件可能需要你提供API密钥才能访问牛津词典的数据。你需要从牛津词典的API提供商那里获取一个API密钥,并在插件初始化时设置它。通常,这可以在插件的文档中找到如何设置的说明。

  2. 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,比如网络错误、API限制等。

  3. UI优化:这个示例的UI非常简单,你可以根据需要进行优化和美化。

  4. 数据展示:这个示例只展示了第一个定义,你可以修改代码来展示更多的定义或提供其他信息(如发音、词性等)。

  5. 插件版本:确保你使用的是最新版本的oxford_dictionary插件,因为API和功能可能会随着版本更新而变化。

希望这个示例能帮助你开始在Flutter应用中集成牛津词典查询功能!

回到顶部