3
2

More than 1 year has passed since last update.

Flutter flappy_search_barの使い方

Last updated at Posted at 2021-02-16

20210523更新
 flappy_search_barがDISCONTINUEDになっている
 代替でFlappy_search_bar_forkを使用する

20210921更新

flappy_search_barの使い方

Flutter のパッケージであるflappy_search_barの使い方の忘却録

開発環境

PC : macOS Catalina
エディター : Visual Studio Code
Flutter : 1.22.1
flappy_search_bar : 1.7.2(2021/2/16 現在の最新バージョン)

製作物

下記画像のような検索バーを作成

検索時

コード

pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  flappy_search_bar: ^1.7.2  <- 追加
       
       
       
main.dart

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

void main() => runApp(
      MaterialApp(
        debugShowCheckedModeBanner: false,
        home: MyHomePage(),
      ),
    );

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State {
  var _itemsizeheight = 65.0;
  var posSelected = 0;

  final _searchBarController = SearchBarController();

  List<String> exampleList = [
    'Axvfgfdg',
    'Axvfgfdg3',
    'Bsdadasd',
    'Axvfgfdg2',
    'Bsdadasd3',
    'Cat',
    'Bsdadasd2',
    'Cat2',
    'Cat3',
    'Dog',
    'Dog2',
    'Dog3',
    'Elephant',
    'Elephant2',
    'Elephant3',
    'Fans',
    'Girls',
    'Hiiii',
    'Ilu',
    'Jeans',
    'Kite',
    'Lion',
    'Men',
    'Nephow',
    'Owl',
    'Please',
    'Quat',
    'Rose',
    'Salt',
    'Trolly',
    'Up',
    'View',
    'Window',
    'Xbox',
    'Yellow',
    'Yummy',
    'Zubin',
    'Zara',
    'Fans2',
    'Girls2',
    'Hiiii2',
    'Ilu2',
    'Jeans2',
    'Kite2',
    'Lion2',
    'Men2',
    'Nephow2',
    'Owl2',
    'Please2',
    'Quat2',
    'Rose2',
    'Salt2',
    'Trolly2',
    'Up2',
    'View2',
    'Window2',
    'Xbox2',
    'Yellow2',
    'Yummy2',
    'Zubin2',
    'Zara2',
    'あいうえお',
    '12345'
  ];

  @override
  void initState() {
    exampleList.sort((a, b) {
      return a.toString().compareTo(b.toString());
    });
    super.initState();
  }

  // 検索する文字を含む文字列のリストを返す
  Future<List<String>> _search(String text) async {
    var tmpList = [];

    tmpList.addAll(
      exampleList.where(
        (element) => element.contains(text),
      ),
    );
    return tmpList;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: SearchBar<String>(
          searchBarPadding: EdgeInsets.symmetric(horizontal: 10), 
          minimumChars: 1,    //検索時の最小文字数
          hintText: "検索",
          cancellationWidget: Text("キャンセル"),
          onSearch: _search,
          placeHolder: Center(      //デフォルトで表示する内容
            child: ListView.builder(
              itemCount: exampleList.length,
              itemExtent: _itemsizeheight,
              itemBuilder: (context, position) {
                return Card(
                  child: Padding(
                    padding: const EdgeInsets.all(16.0),
                    child: Text(
                      exampleList[position],
                      style: TextStyle(fontSize: 20.0),
                    ),
                  ),
                );
              },
            ),
          ),
          //検索文字を含んでいた文字列をCardで表示
          onItemFound: (String word, int index) {
            return Card(
              child: Padding(
                padding: const EdgeInsets.all(20.0),
                child: Text(
                  word,
                  style: TextStyle(fontSize: 14.0),
                ),
              ),
            );
          },
          // 検索時のローディング
          loader: Center(
            child: Text("loading..."),
          ),
          // 検索でエラーになった時
          onError: (error) {
            print(error);
            return Center(
              child: Text("Error occurred : $error"),
            );
          },
        ),
      ),
    );
  }
}


参考

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2