Flutter高仿微信-第56篇-搜索好友
创始人
2024-02-18 10:39:17
0

 Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。

 详情请查看

效果图:

实现代码:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/8/11 12:16* Description : 搜索好友*/Color themeDef = Color(0xffEDEDED);class SearchFriends extends StatelessWidget {const SearchFriends({super.key});@overrideWidget build(BuildContext context) {return const SearchFriendsPage(title: '搜索好友');}
}class SearchFriendsPage extends StatefulWidget {const SearchFriendsPage({super.key, required this.title});final String title;@overrideState createState() => _SearchFriendsState();
}class _SearchFriendsState extends State {//搜索提示框bool hideSearch = true;//搜索结果bool hideSearchResult = true;//从服务器搜索好友void _getUserLikeAccount(String searchAccount) async {bool isNetwork = await CommonNetwork.isNetwork();if(!isNetwork) {CommonUtils.showNetworkError(context);return;}if(searchAccount.isEmpty){return;}String account = "";List userlist = await UserRepository.getInstance().getUserLikeAccount(account, searchAccount);if(userlist.isEmpty){hideSearchResult = false;}setState(() {_userlist = userlist;});}@overridevoid initState() {super.initState();}String results = "";//原来的内容是空的final TextEditingController controller = TextEditingController(text: "");ScrollController _controller = ScrollController();List _userlist = [];@overrideWidget build(BuildContext context) {return Scaffold(appBar: WnAppBar.getAppBar(context, Text("${widget.title}")),body: Column(children: [_getEnterAccountWidget(),_getSearchWidget(),Offstage(offstage: hideSearchResult,child: _noDataWidget(),),Expanded(child: ListView.builder(controller: _controller,itemBuilder: (BuildContext context, int index) {return ChatContentView(userBean: _userlist[index]);},itemCount: _userlist.length,)),],),);}//没有好友提示Widget _noDataWidget() {return Center(child: Padding(padding: EdgeInsets.all(10.0),child: Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [Text('搜索结果为空...',style: TextStyle(fontSize: 16.0),)],),),);}//账号输入框Widget _getEnterAccountWidget(){return Container(height: 60,padding: const EdgeInsets.only(left: 20.0, top: 10, right: 10, bottom: 10),//上下左右都设置边距child: Row(children: [Expanded(child: Container(margin: EdgeInsets.only(right: 20),padding: EdgeInsets.only(left: 10, top:10, right: 10),height: 60,decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(5.0),),color: Colors.white),child: TextField(controller: controller,//decoration: InputDecoration.collapsed(hintText: "账号/手机号"),decoration: InputDecoration(hintText: "账号/手机号", counterText: "", border: InputBorder.none),autocorrect: true,//是否自动更正autofocus: false,maxLines: 1,minLines: 1,maxLength: 20,textAlign: TextAlign.start,style: TextStyle(color: Colors.black),cursorColor: Colors.green,onTap: (){},onChanged: (value){//LogUtils.d("录入的值:${value}");String content = controller.text;if(content.length > 0){hideSearch = false;} else {hideSearch = true;}hideSearchResult = true;setState(() {});},//onSubmitted: _handleSubmitted,enabled: true, //是否禁用),),),MaterialButton(color: Colors.blue,textColor: Colors.white,child: Text("取消"),onPressed: (){Navigator.pop(context);},),],),);}//点击搜索按钮Widget _getSearchWidget(){return InkWell(onTap: (){_getUserLikeAccount(controller.text);},child: Offstage(offstage: hideSearch,child: Container(height: 70,width: double.infinity,padding: const EdgeInsets.only(left: 12.0, top: 10, right: 20,bottom: 10),//上下左右都设置边距child: Row(children: [Image.asset(CommonUtils.getBaseIconUrlPng("main_contacts_icon"), width: 50, height: 50,),SizedBox(width: 10,),Text("搜索:"),Expanded(child: Text("${controller.text}"))],),),),);}
}class ChatContentView extends StatefulWidget {final UserBean userBean;ChatContentView({required this.userBean});@overrideState createState() => _ChatContentViewState();}class _ChatContentViewState extends State {String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);@overridevoid initState() {super.initState();}void _clickDetails(String searchAcccount) async{ContactsBean? contactsBean = await ContactsRepository.getInstance().findContactByFromOrToAccount(account, searchAcccount);if(contactsBean != null && contactsBean.type == ContactsBean.typeReceive){//好友直接跳转到聊天页面Navigator.popUntil(context, (route) {return route.isFirst;});await Navigator.push(context, MaterialPageRoute(builder: (c) {return HomeChatPage(toChatId: searchAcccount);}));} else {Navigator.pop(context);Navigator.push(context,MaterialPageRoute(builder: (context)=>AddFriends(userBean: widget.userBean,)));}}@overrideWidget build(BuildContext context) {return InkWell(onTap: (){_clickDetails(widget.userBean.account??"");},child: Container(//decoration: BoxDecoration(color: Colors.white70),decoration: BoxDecoration(color: Colors.white70, border: Border(bottom:BorderSide(color: Color(0xffd9d9d9), width: 0.3))),//margin: EdgeInsets.only(top: 8.0, bottom: 8),padding: EdgeInsets.all(16.0),child: Row(children: [Expanded(child: Stack(alignment: AlignmentDirectional.centerStart,children: [Text("账号:${widget.userBean.account}   昵称:${widget.userBean.nickName}",style: TextStyle(fontSize: 18),),],),),],),),);}
}

相关内容

热门资讯

大学自我鉴定 【热门】大学自我鉴定集锦8篇  自我鉴定是个人对一个时间段的自我总结,写自我鉴定有利于我们工作能力的...
护士供应室实习自我鉴定 护士供应室实习自我鉴定(通用10篇)  自我鉴定即为自我总结,自我鉴定可以使我们锻炼语言组织能力,不...
业务工作能力的自我评价 业务工作能力的自我评价(精选5篇)  自我评价是自我意识一种形式。是主体对自己思想、愿望、行为和个性...
中专生自我鉴定 关于中专生自我鉴定四篇  自我鉴定是个人在一个时期对自己的学习或工作生活的自我总结,自我鉴定可以提升...
函授大专会计毕业自我鉴定 函授大专会计毕业自我鉴定(精选8篇)  自我鉴定即为自我总结,它是增长才干的一种好办法,让我们一起认...
领导干部廉政的鉴定 领导干部廉政的鉴定  为了健全和完善干部监督管理机制,钦北区严把领导干部任用和表彰前廉政鉴定关,有效...
医学生自我鉴定 【精华】医学生自我鉴定3篇  自我鉴定是个人对一个时段对自己的学习或工作生活的自我总结,它能够给人努...
感恩节问候语短信 2020年感恩节问候语短信大汇总63句  失败时的一句问候;烦恼时的一些开导;放弃时的一句鼓励;成功...
硕士中期考核自我鉴定 硕士中期考核自我鉴定(精选20篇)  正常来说,自我鉴定也是总结的一种,写自我鉴定可以帮助我们正确地...
购车协议书 购车协议书范本(通用6篇)  在社会发展不断提速的今天,很多场合都离不了协议,协议协调着人与人,人与...
情人节祝福问候语短信 情人节祝福问候语短信225句  问候语,又叫见面语、招呼语,是人们生活中常用的及重要的交际口语,用以...
新年手机祝福短信 新年手机祝福短信大全  在日常生活或是工作学习中,大家都不可避免地会接触到短信吧,短信可以由移动通信...
运动会入场词古风文雅 运动会入场词古风文雅  一、什么是运动会  运动会指体育运动的竞赛会,有奥运会等大型运动会,只是范围...
疫情期间上课通知范文优选79... 疫情期间上课通知范文 第一篇亲爱的各位家长:大家好!鉴于当前多地相继出现确诊病例,新冠病毒变异株“德...
中餐座次礼仪示意图 中餐座次礼仪示意图  中国正式宴请均是在举办宴请之前,排定桌次和座次,或者是只排定主桌的座次,其他只...
代理协议书 有关代理协议书4篇  在生活中,我们用到协议书的地方越来越多,签订协议书可以约束双方履行责任。一起来...
单位用人证明 单位用人证明模板(精选14篇)  在生活、工作和学习中,大家都写过证明,肯定对各类证明都很熟悉吧,当...
证件遗失证明的格式 证件遗失证明的格式证件遗失证明的`格式证件遗失证明的格式兹证明我单位XXX,男,xx-xx年x月x日...
给孩子的一封信 给孩子的一封信(通用20篇)  在日常生活或是工作学习中,大家都写过信,肯定对各类书信都很熟悉吧,书...
战略合作框架的协议书 战略合作框架的协议书  甲方:  乙方:  鉴于:  甲方是以研发、制造、销售××及××为主的公司,...