Flutter维基百科查询插件wikipedia的使用

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

Flutter维基百科查询插件wikipedia的使用

描述

Wikipedia Search Tool 是一个用Dart语言编写的新的维基百科搜索工具,通过这个工具你可以搜索任何内容。你还可以通过页面ID获取完整的页面数据。

功能特性

  • 按标题搜索:可以根据关键词搜索相关的维基百科条目。
  • 通过页面ID获取完整页面数据:当你有具体的页面ID时,可以获取该页面的所有信息。

使用方法

示例代码

下面是一个完整的示例代码,展示了如何在Flutter应用中集成和使用wikipedia插件。

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Wikipedia Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late TextEditingController _controller;
  bool _loading = false;
  List<WikipediaSearch> _data = [];

  @override
  void initState() {
    _controller = TextEditingController(text: "What is Flutter");
    getLandingData();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.white,
        title: TextField(
          controller: _controller,
          decoration: InputDecoration(
            hintText: "Search...",
            suffixIcon: InkWell(
              child: const Icon(Icons.search, color: Colors.black),
              onTap: () {
                getLandingData();
              },
            ),
          ),
        ),
      ),
      body: Stack(
        children: [
          ListView.builder(
            itemCount: _data.length,
            padding: const EdgeInsets.all(8),
            itemBuilder: (context, index) => InkWell(
              onTap: () async {
                Wikipedia instance = Wikipedia();
                setState(() {
                  _loading = true;
                });
                var pageData = await instance.searchSummaryWithPageId(pageId: _data[index].pageid!);
                setState(() {
                  _loading = false;
                });
                if (pageData == null) {
                  const snackBar = SnackBar(
                    content: Text('Data Not Found'),
                  );
                  ScaffoldMessenger.of(context).showSnackBar(snackBar);
                } else {
                  showGeneralDialog(
                    context: context,
                    pageBuilder: (context, animation, secondaryAnimation) => Scaffold(
                      appBar: AppBar(
                        title: Text(_data[index].title!,
                            style: const TextStyle(color: Colors.black)),
                        backgroundColor: Colors.white,
                        iconTheme: const IconThemeData(color: Colors.black),
                      ),
                      body: ListView(
                        padding: const EdgeInsets.all(10),
                        children: [
                          Text(
                            pageData!.title!,
                            style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
                          ),
                          const SizedBox(height: 8),
                          Text(
                            pageData.description!,
                            style: const TextStyle(color: Colors.grey, fontStyle: FontStyle.italic),
                          ),
                          const SizedBox(height: 8),
                          Text(pageData.extract!)
                        ],
                      ),
                    ),
                  );
                }
              },
              child: Card(
                elevation: 5,
                margin: const EdgeInsets.all(8),
                child: Padding(
                  padding: const EdgeInsets.all(10),
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: [
                      Text(
                        _data[index].title!,
                        style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
                      ),
                      const SizedBox(height: 10),
                      Text(_data[index].snippet!),
                    ],
                  ),
                ),
              ),
            ),
          ),
          Visibility(
            visible: _loading,
            child: Container(
              width: MediaQuery.of(context).size.width,
              height: MediaQuery.of(context).size.height,
              child: const Center(
                child: CircularProgressIndicator(),
              ),
            ),
          )
        ],
      ),
    );
  }

  Future<void> getLandingData() async {
    try {
      setState(() {
        _loading = true;
      });
      Wikipedia instance = Wikipedia();
      var result = await instance.searchQuery(searchQuery: _controller.text, limit: 10);
      setState(() {
        _loading = false;
        _data = result!.query!.search!;
      });
    } catch (e) {
      print(e);
      setState(() {
        _loading = false;
      });
    }
  }
}

许可证

本项目采用MIT许可证。


以上是关于如何在Flutter中使用wikipedia插件进行维基百科查询的详细介绍和示例代码。希望这些信息能帮助你在项目中快速上手并实现相关功能。如果有任何问题或需要进一步的帮助,请随时提问!


更多关于Flutter维基百科查询插件wikipedia的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter维基百科查询插件wikipedia的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用wikipedia插件来查询维基百科内容的示例代码。

首先,确保你已经在Flutter项目中添加了wikipedia插件。你可以通过以下命令在pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  wikipedia: ^x.y.z  # 请将x.y.z替换为最新版本号

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

以下是一个完整的Flutter应用示例,它使用wikipedia插件来查询并显示维基百科的内容:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Wikipedia Query Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: WikipediaQueryScreen(),
    );
  }
}

class WikipediaQueryScreen extends StatefulWidget {
  @override
  _WikipediaQueryScreenState createState() => _WikipediaQueryScreenState();
}

class _WikipediaQueryScreenState extends State<WikipediaQueryScreen> {
  final Wikipedia wikipedia = Wikipedia();
  String searchTerm = '';
  String resultContent = '';
  bool isLoading = false;

  void _searchWikipedia() async {
    setState(() {
      isLoading = true;
    });

    try {
      var page = await wikipedia.search(searchTerm);
      if (page.items.isNotEmpty) {
        var firstPage = await wikipedia.page(page.items[0].pageid);
        setState(() {
          resultContent = firstPage.extract;
          isLoading = false;
        });
      } else {
        setState(() {
          resultContent = 'No results found.';
          isLoading = false;
        });
      }
    } catch (e) {
      setState(() {
        resultContent = 'Error occurred: $e';
        isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Wikipedia Query'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Search Term',
              ),
              onChanged: (value) {
                searchTerm = value;
              },
            ),
            SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: _searchWikipedia,
              child: Text('Search'),
            ),
            SizedBox(height: 16.0),
            if (isLoading)
              CircularProgressIndicator()
            else
              Text(
                resultContent,
                style: TextStyle(fontSize: 18.0),
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个文本字段用于输入搜索词,一个按钮用于触发搜索,以及一个用于显示结果的文本区域。当点击搜索按钮时,应用会调用_searchWikipedia函数,该函数使用wikipedia插件的search方法查找与搜索词匹配的维基百科页面,并显示第一个页面的摘要内容。

请确保你已经正确配置了网络连接权限,因为维基百科查询需要网络请求。如果你遇到任何问题,可以检查wikipedia插件的文档以获取更多信息。

回到顶部