Flutter圣经阅读插件bible的使用

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

Flutter圣经阅读插件bible的使用

该插件提供了一个简单的接口来与不同的圣经API进行交互。

使用方法

目前该插件仅支持以下API:

名称 需要API密钥 备注
esvapi
getbible 不支持跨越章节的节引用。例如:创世记2-3 ✅,创世记2:1 - 3:5 ❌
bibleorg
bibleapi

简单示例

import 'package:bible/bible.dart' as Bible;

void main() async {
  var passage = await Bible.queryPassage('John 3:16'); // 默认使用GetBible API
  print(passage.passage); // 输出查询文本
}

需要API密钥的示例

Bible.addKeys({'esvapi': 'APITOKEN'});
var passage = await Bible.queryPassage('John 3:16', providerName: 'esvapi');

通过可选参数传递API密钥

Bible.addKeys({'esvapi': 'APITOKEN'});
var passage = await Bible.queryPassage('John 3:16', key: 'APITOKEN');

通过映射传递查询参数

Bible.addKeys({'esvapi': 'APITOKEN'});
var passage = await Bible.queryPassage(
  'John 3:16',
  key: 'APITOKEN',
  parameters: {'param1': 'value1'},
);

指定版本或提供商

var passage = await Bible.queryPassage(
  'John 3:16',
  providerName: 'getbible',
  version: 'asv',
);

注意providerName 对应于本文档开头表格中的名称。

每次查询一段经文时,reference_parser 库会尝试解析查询(即拼写错误将自动更正,简短的经文形式将被允许)。若要防止此行为,只需将 useParser 参数设置为 false

var passage = await Bible.queryPassage('John 3:16', useParser: false);

导入提供商库

如果导入了提供商库,可以直接查询每个提供商,也可以将它们作为可选参数传递给 queryPassage 函数。

import 'package:bible/bible.dart' as Bible;
import 'package:bible/providers.dart';

void main() async {
  var prov = GetBible();
  var passage = await Bible.queryPassage('John 3:16', provider: prov);
}

这与使用 providerName 参数相同,但如果你创建了自己的提供商,可以将其传递给函数。

注意:如果你创建了自己的提供商,请考虑将其贡献回仓库 :).

贡献指南

实现一个API并不难,所以我欢迎人们实现并发送不同圣经API的拉取请求。这是一个很好的入门问题,并不需要深入的Dart知识,只需复制已创建的提供商并在此基础上进行即可!

需要实现的API:

名称 难度
nltapi 简单
bibliaapi 中等
scriptureapi 困难

有关更多具体信息,请参阅贡献指南

完整示例代码

import 'package:bible/bible.dart' as Bible;

void main() async {
  Bible.addKeys({'esvapi': 'APITOKEN'});
  var passage = await Bible.queryPassage('John 3:16');
  print(passage.passage);
}

更多关于Flutter圣经阅读插件bible的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter圣经阅读插件bible的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中开发一个圣经阅读插件(如名为bible的插件),通常涉及数据获取、UI呈现和用户交互等多个方面。以下是一个简化的代码示例,展示了如何使用Flutter创建一个圣经阅读应用的基本结构。注意,实际开发中可能需要处理更多细节,如数据缓存、错误处理、国际化和性能优化等。

1. 添加依赖

首先,在pubspec.yaml文件中添加必要的依赖项,比如用于网络请求的http库(如果圣经文本是从网络上获取的)。

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3

2. 创建数据模型

创建一个简单的数据模型来表示圣经的章节和经文。

class BibleVerse {
  String book;
  int chapter;
  int verse;
  String text;

  BibleVerse({required this.book, required this.chapter, required this.verse, required this.text});
}

3. 获取圣经数据

假设我们有一个API可以获取圣经数据,这里我们模拟一个HTTP请求来获取数据。

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';

Future<List<BibleVerse>> fetchBibleVerses(String book, int chapter) async {
  final response = await http.get(Uri.parse('https://api.example.com/bible/$book/$chapter'));

  if (response.statusCode == 200) {
    // 假设返回的JSON格式如下: [{"verse": 1, "text": "经文内容"}, ...]
    List<dynamic> body = jsonDecode(response.body);
    List<BibleVerse> verses = body.map((dynamic item) {
      return BibleVerse(
        book: book,
        chapter: chapter,
        verse: item['verse'],
        text: item['text'],
      );
    }).toList();
    return verses;
  } else {
    throw Exception('Failed to load verses');
  }
}

4. 构建UI

使用Flutter的StatefulWidgetListView来构建圣经阅读的UI界面。

import 'package:flutter/material.dart';
import 'bible_verse_model.dart'; // 假设你的数据模型文件名为bible_verse_model.dart
import 'bible_data_fetch.dart'; // 假设你的数据获取文件名为bible_data_fetch.dart

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Bible Reader',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: BibleReader(),
    );
  }
}

class BibleReader extends StatefulWidget {
  @override
  _BibleReaderState createState() => _BibleReaderState();
}

class _BibleReaderState extends State<BibleReader> {
  String selectedBook = 'Genesis'; // 默认选择的圣经书卷
  int selectedChapter = 1; // 默认选择的章节
  List<BibleVerse> verses = [];

  @override
  void initState() {
    super.initState();
    loadVerses();
  }

  Future<void> loadVerses() async {
    setState(() {
      verses = []; // 清空当前章节的经文
    });
    try {
      verses = await fetchBibleVerses(selectedBook, selectedChapter);
    } catch (e) {
      print(e);
    }
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bible Reader'),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.refresh),
            onPressed: loadVerses,
          ),
        ],
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Book',
                suffixIcon: IconButton(
                  icon: Icon(Icons.arrow_forward),
                  onPressed: () async {
                    setState(() {
                      selectedBook = 'Genesis'; // 这里应该实现一个下拉选择或者输入验证
                      loadVerses();
                    });
                  },
                ),
              ),
              onSubmitted: (value) async {
                setState(() {
                  selectedBook = value;
                  selectedChapter = 1; // 重置章节
                  loadVerses();
                });
              },
            ),
            SizedBox(height: 16),
            TextField(
              decoration: InputDecoration(
                labelText: 'Chapter',
                suffixIcon: IconButton(
                  icon: Icon(Icons.arrow_forward),
                  onPressed: loadVerses,
                ),
              ),
              keyboardType: TextInputType.number,
              onSubmitted: (value) async {
                setState(() {
                  selectedChapter = int.parse(value);
                  loadVerses();
                });
              },
            ),
            SizedBox(height: 16),
            Expanded(
              child: ListView.builder(
                itemCount: verses.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('${verses[index].chapter}:${verses[index].verse} ${verses[index].text}'),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

5. 运行应用

确保你的开发环境已经设置好,然后运行flutter run来启动应用。

这个示例展示了如何使用Flutter创建一个简单的圣经阅读应用,包括数据获取和UI呈现。实际开发中,你可能需要处理更多的细节,比如网络错误处理、用户输入验证、数据持久化等。此外,为了提高用户体验,还可以考虑添加书签功能、夜间模式、搜索功能等。

回到顶部