Flutter文本搜索插件smart_text_search的使用

Flutter文本搜索插件smart_text_search的使用

Smart Text Search

SmartTextSearch 是一个强大的搜索引擎插件,旨在提供类似于 “Google Search” 和 “Elasticsearch” 的高效准确的搜索能力。与传统搜索引擎不同的是,SmartTextSearch 在本地缓存的数据上运行,确保快速且安全的搜索。它具有高级拼写纠错功能,并能识别相似词汇以提高搜索结果的质量。

该插件提供了高效的搜索解决方案,利用了两种强大的算法。通过语义分析文本并逐个单词进行检查,它能够提供更优质的搜索结果,增强相关性。体验一下该插件带来的好处,它提供了先进的技术以确保查询和搜索文本之间的最佳匹配度。

使用 A Flutter 包进行智能文本搜索

import 'package:smart_text_search/smart_text_search/sort_by_similarity.dart';

//...

// 您的数据
final items = [
  'Apple',
  'Banana',
  'Orange',
  'Strawberry',
  'Grapes',
  'Watermelon',
  'Mango',
  'Pineapple',
  'Kiwi',
  'Peach',
  'Pear',
  'Cherry',
  'Blueberry',
  'Raspberry',
  'Lemon',
  'Lime',
  'Avocado',
  'Coconut',
  'Pomegranate',
  'Blackberry',
  'Cantaloupe',
  'Mandarin',
  'Papaya',
  'Apricot',
  'Guava',
  'Passion Fruit',
  'Plum',
  'Fig',
  'Lychee',
  'Cranberry',
  'Dragon Fruit',
  'Kiwifruit',
  'Star Fruit',
  'Persimmon',
  'Nectarine',
  'Tangerine',
  'Grapefruit',
  'Jackfruit',
  'Mulberry',
  'Pawpaw',
  'Quince',
  'Clementine',
  'Honeydew',
  'Blackcurrant',
  'Elderberry',
  'Date',
  'Rambutan',
  'Soursop',
  'Carambola',
  'Cactus Fruit'
];

const textToSearch = 'Banana';

final sortedItems = orderBySimilarity(
  textToSearch,
  items,
  (index, item) => item
);

String result = sortedItems.map((item) => item).toString();
// result: (Banana, Avocado, Apple, Blueberry, Blackberry, Cherry, Coconut, Cactus Fruit, ...)

完整示例 Demo

以下是完整的示例代码,展示了如何在 Flutter 应用程序中使用 smart_text_search 插件。

import 'package:flutter/material.dart';
import 'package:smart_text_search/smart_text_search/sort_by_similarity.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> {
  final TextEditingController _searchTextController = TextEditingController();

  final List<String> items = [
    'Apple',
    'Banana',
    'Orange',
    'Strawberry',
    'Grapes',
    'Watermelon',
    'Mango',
    'Pineapple',
    'Kiwi',
    'Peach',
    'Pear',
    'Cherry',
    'Blueberry',
    'Raspberry',
    'Lemon',
    'Lime',
    'Avocado',
    'Coconut',
    'Pomegranate',
    'Blackberry',
    'Cantaloupe',
    'Mandarin',
    'Papaya',
    'Apricot',
    'Guava',
    'Passion Fruit',
    'Plum',
    'Fig',
    'Lychee',
    'Cranberry',
    'Dragon Fruit',
    'Kiwifruit',
    'Star Fruit',
    'Persimmon',
    'Nectarine',
    'Tangerine',
    'Grapefruit',
    'Jackfruit',
    'Mulberry',
    'Pawpaw',
    'Quince',
    'Clementine',
    'Honeydew',
    'Blackcurrant',
    'Elderberry',
    'Date',
    'Rambutan',
    'Soursop',
    'Carambola',
    'Cactus Fruit'
  ];

  List<String> listToView = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    listToView = items;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: ListView(
          children: [
            TextField(
              controller: _searchTextController,
            ),
            IconButton(
              onPressed: _onSearch, 
              icon: const Icon(Icons.search),
            ),
            ...listToView.map<Widget>(
              (e) => ListTile(
                title: Text(e),
              ),
            ),
          ],
        ),
      ),
    );
  }

  _onSearch(){
    List<String> searchResults = orderBySimilarity(
      _searchTextController.text, 
      items, 
      (index, item) => item
    );
    setState(() {
      listToView = searchResults;
    });
  }
}

更多关于Flutter文本搜索插件smart_text_search的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本搜索插件smart_text_search的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用smart_text_search插件的示例代码。这个插件可以用于在文本中进行高效的搜索操作。以下是一个简单的示例,展示了如何在Flutter应用中集成和使用smart_text_search

首先,确保你已经在pubspec.yaml文件中添加了smart_text_search依赖:

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

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

接下来,创建一个Flutter应用,并在其中使用smart_text_search。以下是一个完整的示例代码:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final String longText = """
  这是一个很长的文本,用于演示smart_text_search插件的功能。
  你可以在这里输入任何你想要搜索的关键词,然后查看搜索结果。
  这个文本包含了很多不同的单词和句子,用于测试搜索的准确性和效率。
  """;

  late TextSearcher textSearcher;
  late List<SearchResult> searchResults;
  String searchQuery = "";

  @override
  void initState() {
    super.initState();
    textSearcher = TextSearcher(longText);
  }

  void _onSearchChanged(String query) {
    setState(() {
      searchQuery = query;
      searchResults = textSearcher.search(query);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Smart Text Search Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              decoration: InputDecoration(
                labelText: 'Search',
                suffixIcon: IconButton(
                  icon: Icon(Icons.clear),
                  onPressed: () {
                    _onSearchChanged("");
                  },
                ),
              ),
              onChanged: _onSearchChanged,
            ),
            SizedBox(height: 16),
            Expanded(
              child: searchResults.isEmpty
                  ? Text('No results found for "$searchQuery".')
                  : ListView.builder(
                      itemCount: searchResults.length,
                      itemBuilder: (context, index) {
                        final result = searchResults[index];
                        return ListTile(
                          title: Text(
                            result.text,
                            style: TextStyle(
                              backgroundColor: Colors.yellow.withOpacity(0.5),
                            ),
                          ),
                        );
                      },
                    ),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 安装依赖:在pubspec.yaml文件中添加了smart_text_search依赖。
  2. 创建UI:使用MaterialAppScaffold创建了一个简单的Flutter应用界面。
  3. 初始化TextSearcher:在initState方法中,我们使用长文本初始化了一个TextSearcher对象。
  4. 处理搜索:在文本字段的onChanged回调中,我们调用textSearcher.search(query)来获取搜索结果,并更新UI。
  5. 显示搜索结果:如果搜索结果不为空,我们使用ListView.builder来显示搜索结果。每个搜索结果项都高亮显示匹配的文本部分。

这个示例展示了如何使用smart_text_search插件在Flutter应用中实现文本搜索功能。你可以根据需要进一步定制和扩展这个示例。

回到顶部