Flutter模糊搜索插件fuzzy的使用

Flutter模糊搜索插件fuzzy的使用

Fuzzy简介

Fuzzy是一个基于Dart的模糊搜索库,它允许开发者在应用中实现类似于Google搜索的智能匹配功能。这个项目主要移植自Fuse.js,为Dart和Flutter提供了强大的模糊匹配能力。

Pub Package CI

安装

要在Flutter项目中使用fuzzy插件,首先需要在pubspec.yaml文件中添加依赖:

dependencies:
  fuzzy: ^1.0.0

然后运行以下命令来获取最新的包:

flutter packages get

使用方法

下面是一个简单的例子,演示了如何使用fuzzy进行模糊搜索:

示例代码

import 'package:fuzzy/fuzzy.dart';

void main() {
  // 创建一个包含书籍标题的列表
  final bookList = [
    'Old Man\'s War',
    'The Lock Artist',
    'HTML5',
    'Right Ho Jeeves',
    'The Code of the Wooster',
    'Thank You Jeeves',
    'The DaVinci Code',
    'Angels & Demons',
    'The Silmarillion',
    'Syrup',
    'The Lost Symbol',
    'The Book of Lies',
    'Lamb',
    'Fool',
    'Incompetence',
    'Fat',
    'Colony',
    'Backwards, Red Dwarf',
    'The Grand Design',
    'The Book of Samson',
    'The Preservationist',
    'Fallen',
    'Monster 1959',
  ];

  // 初始化Fuzzy对象,并设置一些选项
  final fuse = Fuzzy(
    bookList,
    options: FuzzyOptions(
      findAllMatches: true, // 查找所有匹配项
      tokenize: true,       // 将字符串分割成单词进行匹配
      threshold: 0.5,       // 设置匹配度阈值,越低越严格
    ),
  );

  // 执行搜索
  final result = fuse.search('book');

  // 输出说明信息
  print(
      'A score of 0 indicates a perfect match, while a score of 1 indicates a complete mismatch.');

  // 遍历结果并打印
  result.forEach((r) {
    print('\nScore: ${r.score}\nTitle: ${r.item}');
  });
}

这段代码创建了一个包含多个书籍名称的列表,并通过Fuzzy类对其进行模糊搜索。我们设置了几个参数来调整搜索行为,例如是否查找所有匹配项、是否将文本分词以及匹配度阈值等。最后,它会输出每个匹配项的评分和对应的书名。

如果您想要更深入地了解FuzzyOptions类提供的其他配置选项,请参阅官方文档:FuzzyOptions

希望这个示例能帮助您快速上手fuzzy插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个关于如何在Flutter中使用fuzzy插件来实现模糊搜索的示例代码。fuzzy插件并不是一个官方的Flutter插件,但我们可以使用类似的模糊匹配算法来实现模糊搜索功能。为了简化,这里我们使用flutter_fuzzy_search这个假设的插件名称(注意:实际使用时,请确保插件在pub.dev上是可用的,或者根据需要实现自定义模糊搜索算法)。

首先,确保在你的pubspec.yaml文件中添加了这个插件(假设它存在,实际使用时替换为真实插件或手动实现算法):

dependencies:
  flutter:
    sdk: flutter
  flutter_fuzzy_search: ^x.y.z  # 替换为实际版本号

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

接下来是示例代码,展示如何在Flutter中使用模糊搜索功能:

import 'package:flutter/material.dart';
import 'package:flutter_fuzzy_search/flutter_fuzzy_search.dart'; // 假设的插件导入

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  List<String> items = [
    'Apple',
    'Banana',
    'Cherry',
    'Date',
    'Elderberry',
    'Fig',
    'Grape',
    'Honeydew',
    'Indian Fig',
    'Jackfruit',
  ];

  List<String> filteredItems = [];
  String searchQuery = '';

  void onSearchTextChanged(String query) {
    setState(() {
      searchQuery = query;
      filteredItems = items
          .where((item) => FuzzySearch.search(query, item).isNotEmpty)
          .toList();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Fuzzy Search Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Search',
                suffixIcon: IconButton(
                  icon: Icon(Icons.clear),
                  onPressed: () {
                    setState(() {
                      searchQuery = '';
                      filteredItems = items;
                    });
                  },
                ),
              ),
              onChanged: onSearchTextChanged,
            ),
            Expanded(
              child: ListView.builder(
                itemCount: filteredItems.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(filteredItems[index]),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

// 假设的FuzzySearch类,实际使用时可能需要替换为真实插件或自定义实现
class FuzzySearch {
  static List<int> search(String pattern, String text) {
    List<int> result = [];
    int patternLength = pattern.length;
    int textLength = text.length;

    if (patternLength == 0) {
      return List.filled(textLength, 0);
    }

    for (int i = 0, j = 0; i < textLength;) {
      if (pattern[j] == text[i]) {
        result.add(i);
        if (++j == patternLength) {
          break;
        }
      }
      i++;
    }

    return result;
  }
}

注意

  1. 上述代码中的FuzzySearch类是一个简单的示例,它实际上并没有实现复杂的模糊搜索算法。在实际应用中,你可能需要实现更复杂的模糊匹配逻辑,或者使用现有的模糊搜索库。
  2. flutter_fuzzy_search是一个假设的插件名称。在实际项目中,请查找并使用可用的模糊搜索插件,或者根据需求实现自定义的模糊搜索算法。

如果你需要一个更复杂的模糊搜索算法,可以考虑使用fuzzywuzzy(Python库,可以通过平台通道在Flutter中调用)或者手动实现基于Levenshtein距离等算法的模糊搜索。

回到顶部