algorithmic_search 0.0.2 algorithmic_search: ^0.0.2 copied to clipboard
Customizable Flutter search sheet with single/multi-select modes, flexible UI, and selection management.
Algorithmic Search #
algorithmic_search
is a Flutter package that provides a flexible, customizable search sheet widget. The SearchSheet
widget supports both single and multi-select modes, making it suitable for various search and selection use cases in mobile applications.
Features #
- Single and Multi-Select Modes: Easily switch between
singleSelect
andmultiSelect
modes using theSearchSheetController
. - Customizable UI: Modify padding, spacing, search field decoration, and more to fit your app's design.
- Selected Items Display: Optionally show selected items at the top in
multiSelect
mode. - Generic Search Functionality: Define custom search criteria to filter items based on user input.
- Example App: Example code is included to demonstrate how to implement and use the
SearchSheet
widget in a Flutter application.
Getting Started #
To use this package, add algorithmic_search
as a dependency in your pubspec.yaml
file:
dependencies:
algorithmic_search: ^0.0.1
Usage #
Basic Setup #
Import the package and create a SearchSheetController
to manage selected items.
import 'package:algorithmic_search/algorithmic_search.dart';
// Initialize the controller with the desired selection type
final controller = SearchSheetController<String>(type: SearchSheetType.multiSelect);
Example Usage #
Here's an example of how to use the SearchSheet
widget in a Flutter app:
import 'package:flutter/material.dart';
import 'package:algorithmic_search/algorithmic_search.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Search Sheet Example',
home: const SearchExamplePage(),
);
}
}
class SearchExamplePage extends StatelessWidget {
const SearchExamplePage({super.key});
@override
Widget build(BuildContext context) {
final List<String> items = ["Apple", "Banana", "Cherry", "Date", "Elderberry"];
final controller = SearchSheetController<String>(type: SearchSheetType.multiSelect);
return Scaffold(
appBar: AppBar(title: const Text("Search Sheet Example")),
body: Center(
child: ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (_) {
return SearchSheet<String>(
items: items,
controller: controller,
searchCriteria: (item, query) => item.toLowerCase().contains(query.toLowerCase()),
itemBuilder: (context, item) => ListTile(
title: Text(item),
trailing: Consumer<SearchSheetController<String>>(
builder: (context, controller, child) {
return Icon(
Icons.check_circle,
color: controller.selectedItems.contains(item) ? Colors.green : Colors.grey,
);
},
),
),
onItemSelected: (item) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Selected item: $item")),
);
},
searchFieldDecoration: const InputDecoration(
labelText: "Search",
border: OutlineInputBorder(),
),
showSelectedItems: true,
);
},
);
},
child: const Text("Open Search Sheet"),
),
),
);
}
}
Parameters #
- items: List of items to display and search.
- controller: The
SearchSheetController
that manages selection state. - searchCriteria: Function that filters items based on user input.
- itemBuilder: Function that builds each item widget.
- onItemSelected: Callback when an item is selected.
- searchFieldDecoration: Custom decoration for the search field.
- labelText: Label for the search field.
- padding: Padding around the widget.
- spacing and runSpacing: Spacing options for selected items in
multiSelect
mode. - showSelectedItems: Controls whether selected items are shown at the top.
License #
This project is licensed under the MIT License. See the LICENSE file for details.