Flutter 用于颤振适应的搜索栏包
我正在为我的应用程序制作搜索栏,但我不知道如何使我的旧代码适应这个新软件包。我在Flatter工作,我下载import'package:flappy_search_bar/flappy_search_bar.dart';我在搜索栏中使用了这个代码Flutter 用于颤振适应的搜索栏包,flutter,searchbar,Flutter,Searchbar,我正在为我的应用程序制作搜索栏,但我不知道如何使我的旧代码适应这个新软件包。我在Flatter工作,我下载import'package:flappy_search_bar/flappy_search_bar.dart';我在搜索栏中使用了这个代码 import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flappy_search_bar/flappy_search_bar.dart'; import 'pac
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flappy_search_bar/flappy_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
class Searchbar extends StatefulWidget {
@override
SearchBarState createState() => SearchBarState();
}
class SearchBarState extends State<Searchbar> {
TextEditingController textEditingController = TextEditingController();
final database = Firestore.instance;
String searchString;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: <Widget>[
Expanded(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(30.0),
child: Container(
child: TextField(
onChanged: (val) {
setState(() {
searchString = val.toLowerCase();
});
},
controller: textEditingController,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.clear),
onPressed: () => textEditingController.clear()),
hintText: " Search name here ",
hintStyle: TextStyle(
fontFamily: 'Antra', color: Colors.blueGrey)),
),
),
),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: (searchString == null || searchString.trim() == '')
? Firestore.instance.collection('Users').snapshots()
: Firestore.instance
.collection('Users')
.where('name', isEqualTo: searchString)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('We got an error ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return SizedBox(
child: Center(
// child: Lottie.asset('animations/loading2.json'),
),
);
case ConnectionState.none:
return Text('Oops no data present');
case ConnectionState.done:
return Text('We are done');
default:
return new ListView(
children: snapshot.data.documents
.map((DocumentSnapshot document) {
return new ListTile(
title: Text(document.data['name']),
);
}).toList());
}
},
))
],
),
)
],
)));
}
}
import'包:cloud_firestore/cloud_firestore.dart';
导入“package:flappy_search_bar/flappy_search_bar.dart”;
进口“包装:颤振/材料.省道”;
导入“包:lottie/lottie.dart”;
类Searchbar扩展StatefulWidget{
@凌驾
SearchBarState createState()=>SearchBarState();
}
类SearchBarState扩展状态{
TextEditingController TextEditingController=TextEditingController();
最终数据库=Firestore.instance;
字符串搜索字符串;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子:列(
儿童:[
扩大(
子:列(
儿童:[
填充物(
填充:常数边集全部(30.0),
子:容器(
孩子:TextField(
一旦更改:(val){
设置状态(){
searchString=val.toLowerCase();
});
},
控制器:textEditingController,
装饰:输入装饰(
后缀:图标按钮(
图标:图标(图标。清除),
按下时:()=>textEditingController.clear()),
hintText:“在此搜索名称”,
hintStyle:TextStyle(
fontFamily:“Antra”,颜色:Colors.蓝灰色,
),
),
),
扩大(
孩子:StreamBuilder(
流:(searchString==null | | searchString.trim()=='')
?Firestore.instance.collection('Users').snapshots()
:Firestore.instance
.collection('用户')
.where('name',isEqualTo:searchString)
.snapshots(),
生成器:(上下文,快照){
if(snapshot.hasError){
返回文本('我们得到一个错误${snapshot.error}');
}
交换机(快照.连接状态){
案例连接状态。正在等待:
返回大小框(
儿童:中心(
//子项:Lottie.asset('animations/loading2.json'),
),
);
案例连接状态。无:
返回文本(“Oops无数据存在”);
案例连接状态。完成:
返回文本(“我们完成了”);
违约:
返回新的ListView(
子项:snapshot.data.documents
.map((文档快照文档){
返回新的ListTile(
标题:文本(document.data['name']),
);
}).toList());
}
},
))
],
),
)
],
)));
}
}
这就是他们所用的例子:
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: SearchBar<Post>(
searchBarPadding: EdgeInsets.symmetric(horizontal: 10),
headerPadding: EdgeInsets.symmetric(horizontal: 10),
listPadding: EdgeInsets.symmetric(horizontal: 10),
onSearch: _getALlPosts,
searchBarController: _searchBarController,
placeHolder: Text("placeholder"),
cancellationWidget: Text("Cancel"),
emptyWidget: Text("empty"),
indexedScaledTileBuilder: (int index) => ScaledTile.count(1, index.isEven ? 2 : 1),
header: Row(
children: <Widget>[
RaisedButton(
child: Text("sort"),
onPressed: () {
_searchBarController.sortList((Post a, Post b) {
return a.body.compareTo(b.body);
});
},
),
RaisedButton(
child: Text("Desort"),
onPressed: () {
_searchBarController.removeSort();
},
),
RaisedButton(
child: Text("Replay"),
onPressed: () {
isReplay = !isReplay;
_searchBarController.replayLastSearch();
},
),
],
),
onCancelled: () {
print("Cancelled triggered");
},
mainAxisSpacing: 10,
crossAxisSpacing: 10,
crossAxisCount: 2,
onItemFound: (Post post, int index) {
return Container(
color: Colors.lightBlue,
child: ListTile(
title: Text(post.title),
isThreeLine: true,
subtitle: Text(post.body),
onTap: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => Detail()));
},
),
);
},
),
),
);
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
孩子:搜索栏(
搜索栏填充:边集。对称(水平:10),
头部添加:边缘组。对称(水平:10),
列表填充:边集。对称(水平:10),
onSearch:_getALlPosts,
searchBarController:\u searchBarController,
占位符:文本(“占位符”),
cancellationWidget:文本(“取消”),
emptyWidget:Text(“empty”),
indexedScaledTileBuilder:(int index)=>ScaledTile.count(1,index.isEven?2:1),
标题:行(
儿童:[
升起的按钮(
子项:文本(“排序”),
已按下:(){
_searchBarController.sortList((a柱、b柱){
返回a.body.compareTo(b.body);
});
},
),
升起的按钮(
子项:文本(“解吸”),
已按下:(){
_searchBarController.removeSort();
},
),
升起的按钮(
子:文本(“重播”),
已按下:(){
isReplay=!isReplay;
_searchBarController.replayLastSearch();
},
),
],
),
一旦取消:(){
打印(“取消触发”);
},
平均间距:10,
横轴间距:10,
交叉轴计数:2,
onItemFound:(Post-Post,int-index){
返回容器(
颜色:颜色。浅蓝色,
孩子:ListTile(
标题:文本(后标题),
伊斯特里琳:是的,
字幕:文本(后正文),
onTap:(){
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>Detail());
},
),
);
},
),
),
);
}
你知道如何更改代码以使用此软件包(从软件包中设置搜索栏的样式)吗