gecko/lib/screens/search.dart

154 lines
3.8 KiB
Dart
Raw Normal View History

2021-02-16 04:57:13 +01:00
import 'package:flutter/material.dart';
class SearchList extends StatefulWidget {
SearchList({Key key}) : super(key: key);
2021-02-16 04:57:13 +01:00
@override
_SearchListState createState() => new _SearchListState();
}
class _SearchListState extends State<SearchList> {
Widget appBarTitle = new Text(
"Search Sample",
style: new TextStyle(color: Colors.white),
);
Icon actionIcon = new Icon(
Icons.search,
color: Colors.white,
);
2021-02-16 04:57:13 +01:00
final key = new GlobalKey<ScaffoldState>();
final TextEditingController _searchQuery = new TextEditingController();
List<String> _list;
bool _isSearching;
2021-02-16 04:57:13 +01:00
String _searchText = "";
_SearchListState() {
_searchQuery.addListener(() {
if (_searchQuery.text.isEmpty) {
setState(() {
_isSearching = false;
2021-02-16 04:57:13 +01:00
_searchText = "";
});
} else {
2021-02-16 04:57:13 +01:00
setState(() {
_isSearching = true;
2021-02-16 04:57:13 +01:00
_searchText = _searchQuery.text;
});
}
});
}
@override
void initState() {
super.initState();
_isSearching = false;
2021-02-16 04:57:13 +01:00
init();
}
void init() {
_list = List();
_list.add("Google");
_list.add("IOS");
_list.add("Andorid");
_list.add("Dart");
_list.add("Flutter");
_list.add("Python");
_list.add("React");
_list.add("Xamarin");
_list.add("Kotlin");
_list.add("Java");
_list.add("RxAndroid");
}
@override
Widget build(BuildContext context) {
return new Scaffold(
key: key,
appBar: buildBar(context),
body: new ListView(
padding: new EdgeInsets.symmetric(vertical: 8.0),
children: _isSearching ? _buildSearchList() : _buildList(),
2021-02-16 04:57:13 +01:00
),
);
}
List<ChildItem> _buildList() {
return _list.map((contact) => new ChildItem(contact)).toList();
}
List<ChildItem> _buildSearchList() {
if (_searchText.isEmpty) {
return _list.map((contact) => new ChildItem(contact)).toList();
} else {
2021-02-16 04:57:13 +01:00
List<String> _searchList = List();
for (int i = 0; i < _list.length; i++) {
String name = _list.elementAt(i);
2021-02-16 04:57:13 +01:00
if (name.toLowerCase().contains(_searchText.toLowerCase())) {
_searchList.add(name);
}
}
return _searchList.map((contact) => new ChildItem(contact)).toList();
2021-02-16 04:57:13 +01:00
}
}
Widget buildBar(BuildContext context) {
return new AppBar(centerTitle: true, title: appBarTitle, actions: <Widget>[
new IconButton(
icon: actionIcon,
onPressed: () {
setState(() {
if (this.actionIcon.icon == Icons.search) {
this.actionIcon = new Icon(
Icons.close,
color: Colors.white,
);
this.appBarTitle = new TextField(
controller: _searchQuery,
style: new TextStyle(
color: Colors.white,
),
decoration: new InputDecoration(
prefixIcon: new Icon(Icons.search, color: Colors.white),
hintText: "Search...",
hintStyle: new TextStyle(color: Colors.white)),
);
_handleSearchStart();
} else {
_handleSearchEnd();
}
});
},
),
]);
2021-02-16 04:57:13 +01:00
}
void _handleSearchStart() {
setState(() {
_isSearching = true;
2021-02-16 04:57:13 +01:00
});
}
void _handleSearchEnd() {
setState(() {
this.actionIcon = new Icon(
Icons.search,
color: Colors.white,
);
this.appBarTitle = new Text(
"Search Sample",
style: new TextStyle(color: Colors.white),
);
_isSearching = false;
2021-02-16 04:57:13 +01:00
_searchQuery.clear();
});
}
}
class ChildItem extends StatelessWidget {
final String name;
ChildItem(this.name);
@override
Widget build(BuildContext context) {
return new ListTile(title: new Text(this.name));
}
}