search_delegate_flutter
Search delegate lets you handle your list of items in a way that you can search through them efficiently and get the items that meets your conditions.
Getting Started
Note that all delegates extends ChangeNotifier. Simple usage example:
import the package
import 'package:search_delegate_flutter/search_delegate_flutter.dart';
create the items like so. delegates at the start does not have root nodes, so the first addition to them will be their root node.
List<int> items = List.generate(1000,(index) => index);
TreeSearchDelegate<int> treeDelegate = TreeSearchDelegate(items);
ChainedSearchDelegate<int> chainedDelegate = ChainedSearchDelegate(items)
Simple Usage
for TreeSearchDelegate, add method adds a node under the root if parentNodeLabel is not specified. notice that add method has a generic type, which is used to determine params type. initialValue means the starting value of the node and when searching through it will be used.You can also change it later,mind that doing so will effect future searches. You can add nodes to above examples like so:
treeDelegate.add<int>((item, param) => item > param, 150,
nodeLabel: 'root');
treeDelegate.add<int>((item, param) => item < param, 1500,
nodeLabel: 'lesserThan1500', filterType: TREE_FILTER_TYPE.ONLY);
treeDelegate.add<int>((item,param) => item % param == 0,3,nodeLabel:'dividableBy3',parentNodeLabel:'lesserThan1500')
for ChainedSearchDelegate it is simpler
chainedDelegate.chain<int>((item,param) => item < param,140);
You can do all type of searches.This libraries main goal is to help manage and maintain searching practices. For example a Regular expression search would something like this:
//for chained delegate
var regex = RegExp(".*a.*");
chainedDelegate.chain<RegExp>(
(item, param) => param.hasMatch(item.name), regex);
treeDelegate.add<RegExp>((item,param) => param.hasMatch(item.name),regex,nodeLabel:'matchNameRegexp')
While using treeSearchDelegate, you can create the root and the first subNodes by calling treeDelegate.createNodeTree. If insertIntoTree is false and the root is not null then the created root node will be returned with the subNodes. An example:
treeSearchDelegate.createNodeTree(
[
TreeNodeData(
initialValue: 450, search: (item, param) => item.id < param),
TreeNodeData(
initialValue: 2500, search: (item, param) => item.price > param),
TreeNodeData(
search: (item, param) => item.duration < param,
initialValue: 2,
),
TreeNodeData(
search: (item, param) => item.id > param,
initialValue: 850,
),
TreeNodeData(
search: (item, param) => item.price < param, initialValue: 250),
],
(item, param) => item.isOpen == param,
true,
insertIntoTree: true,
filterType: TREE_FILTER_TYPE.ONLY,
);