Flutterでの検索機能の実装方法


  1. テキストフィールドとリストビューを使用する方法:

    • 検索するテキストフィールドを作成します。これはユーザーが検索語句を入力するためのものです。
    • リストビューには、検索結果を表示するためのリストアイテムが含まれます。
    • テキストフィールドの入力が変更されるたびに、検索語句を使ってリストアイテムをフィルタリングします。
    • フィルタリングされた結果をリストビューに表示します。

    以下は、上記の方法のコード例です:

    class SearchPage extends StatefulWidget {
     @override
     _SearchPageState createState() => _SearchPageState();
    }
    class _SearchPageState extends State<SearchPage> {
     List<String> blogPosts = [
       "Flutter検索機能の実装方法",
       "Flutterのアニメーションの使い方",
       "Flutterウィジェットの一覧",
       // ... 他のブログ投稿
     ];
     List<String> filteredPosts = [];
     void filterPosts(String searchTerm) {
       setState(() {
         filteredPosts = blogPosts
             .where((post) =>
                 post.toLowerCase().contains(searchTerm.toLowerCase()))
             .toList();
       });
     }
     @override
     Widget build(BuildContext context) {
       return Scaffold(
         appBar: AppBar(
           title: Text("ブログ検索"),
         ),
         body: Column(
           children: [
             TextField(
               onChanged: (value) => filterPosts(value),
               decoration: InputDecoration(
                 labelText: '検索',
               ),
             ),
             Expanded(
               child: ListView.builder(
                 itemCount: filteredPosts.length,
                 itemBuilder: (context, index) {
                   return ListTile(
                     title: Text(filteredPosts[index]),
                   );
                 },
               ),
             ),
           ],
         ),
       );
     }
    }

    上記のコードでは、SearchPageというウィジェットを作成し、TextFieldListViewを使用して検索機能を実装しています。filterPostsメソッドは、検索語句に基づいて投稿をフィルタリングし、filteredPostsリストに格納します。リストビューは、フィルタリングされた投稿を表示します。

  2. ライブラリの使用: Flutterには、検索機能を簡単に実装するためのサードパーティ製のライブラリもあります。例えば、flutter_search_barflutter_typeaheadなどがあります。これらのライブラリを使用することで、より高度な検索機能を実装することができます。

    以下は、flutter_search_barライブラリを使用したコード例です:

    import 'package:flutter_search_bar/flutter_search_bar.dart';
    class SearchPage extends StatefulWidget {
     @override
     _SearchPageState createState() => _SearchPageState();
    }
    class _SearchPageState extends State<SearchPage> {
     SearchBar searchBar;
     List<String> blogPosts = [
       "Flutter検索機能の実装方法",
       "Flutterのアニメーションの使い方",
       "Flutterウィジェットの一覧",
       // ... 他のブログ投稿
     ];
     List<String> filteredPosts = [];
     @override
     void initState() {
       super.initState();
       searchBar = SearchBar(
         inBar: true,
         setState: setState,
         onSubmitted: filterPosts,
         buildDefaultAppBar: buildAppBar,
       );
     }
     void filterPosts(String searchTerm) {
       setState(() {
         filteredPosts = blogPosts
             .where((post) =>
                 post.toLowerCase().contains(searchTerm.toLowerCase()))
             .toList();
       });
     }
     AppBar buildAppBar(BuildContext context) {
       return AppBar(
         title: Text('ブログ検索'),
         actions: [searchBar.getSearchAction(context)],
       );
     }
     @override
     Widget build(BuildContext context) {
       return Scaffold(
         appBar: searchBar.build(context),
         body: ListView.builder(
           itemCount: filteredPosts.length,
           itemBuilder: (context, index) {
             return ListTile(
               title: Text(filteredPosts[index]),
             );
           },
         ),
       );
     }
    }

    上記のコードでは、flutter_search_barライブラリを使用して検索バーを作成し、SearchBarウィジェットをカスタマイズして検索機能を実装しています。filterPostsメソッドは、検索語句に基づいて投稿をフィルタリングし、filteredPostsリストに格納します。リストビューは、フィルタリングされた投稿を表示します。

以上の方法を使用することで、Flutterで検索機能を実装することができます。必要に応じて、コードをカスタマイズして要件に合わせて調整してください。