日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flutter高仿微信-第26篇-新的朋友

發布時間:2024/1/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flutter高仿微信-第26篇-新的朋友 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Flutter高仿微信系列共59篇,從Flutter客戶端、Kotlin客戶端、Web服務器、數據庫表結構、Xmpp即時通訊服務器、視頻通話服務器、騰訊云服務器全面講解。

詳情請查看

效果圖:

實現代碼:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/8/17 15:48* Description : 新的朋友*/ class NewFriends extends StatelessWidget {const NewFriends({super.key});@overrideWidget build(BuildContext context) {return const NewFriendsPage(title: '新的朋友');} }class NewFriendsPage extends StatefulWidget {const NewFriendsPage({super.key, required this.title});final String title;@overrideState<NewFriendsPage> createState() => _NewFriendsPageState(); }class _NewFriendsPageState extends State<NewFriendsPage> {final ScrollController _scrollController = ScrollController(); //listview 的控制器List<ContactsBeanComb> _contactList = [];var json; //是否正在加載數據@overridevoid initState() {super.initState();_updateStatus();_getData();//下面這個方法每次都底部都會執行,上面的代碼只會執行一次_scrollController.addListener(() {if (_scrollController.position.pixels >_scrollController.position.maxScrollExtent - 20) {_getData();}});}//更改狀態void _updateStatus() async {ContactsRepository.getInstance().updateContactStatusRead();Map<String, Object> result = HashMap<String, Object>();eventBus.emit(BaseEvent(BaseEvent.TYPE_READ_FRIENDS, result: result));}//加載數據_getData() async {List<ContactsBeanComb> contactList = await ContactsRepository.getInstance().findAllContactsCombNew();_contactList = [];setState(() {_contactList = contactList;});}//沒有好友請求顯示Widget _noDataWidget() {return Center(child: Padding(padding: EdgeInsets.all(10.0),child: Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[Text('沒有新的朋友...',style: TextStyle(fontSize: 16.0),)],),),);}Future<void> _onRefresh() async {await Future.delayed(Duration(seconds: 3), () {LogUtils.d('通訊錄refresh');});}//接受好友邀請void _receiveFriends(ContactsBeanComb contactsBeanComb){XmppManager.getInstance().createRoster(contactsBeanComb.toAccount);ContactsBean contactsBean = ContactsBean();contactsBean.id = contactsBeanComb.id;contactsBean.fromAccount = contactsBeanComb.fromAccount;contactsBean.toAccount = contactsBeanComb.toAccount;contactsBean.type = ContactsBean.typeReceive;contactsBean.addTime = contactsBeanComb.addTime;ContactsRepository.getInstance().updateContactLocal(contactsBean);ContactsRepository.getInstance().updateContactServer(contactsBean);ChatSendBean chatSendBean = ChatSendBean();chatSendBean.contentType = CommonUtils.TYPE_RECEIVE_FRIENDS;chatSendBean.content = contactsBeanComb.toAccount;String message = jsonEncode(chatSendBean);_sendMessage(contactsBeanComb.fromAccount, message);Map<String, Object> result = HashMap<String, Object>();eventBus.emit(BaseEvent(BaseEvent.TYPE_RECEIVE_FRIENDS, result: result));Navigator.pop(context);}//發送消息_sendMessage(String toAccount, var message){int id = DateTime.now().millisecondsSinceEpoch;String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);String toJid = toAccount + "@wangning";XmppManager.getInstance().sendMessage(toJid, message, "$account", id);}@overrideWidget build(BuildContext context) {return Scaffold(appBar: WnAppBar.getAppBar(context, Text("${widget.title}")),body: Column(children: [Expanded(child:_contactList.length > 0? RefreshIndicator(onRefresh: _onRefresh,child: ListView.builder(itemCount: _contactList.length,controller: _scrollController,itemBuilder: (context, index) {return InkWell(onLongPress: (){_showDeleteDialog(_contactList[index].fromAccount, _contactList[index].toAccount);},onTap: (){},child: Container(decoration: BoxDecoration(border: Border(bottom:BorderSide(color: Color(0xffd9d9d9), width: 0.3))),width: double.infinity,padding: EdgeInsets.only(left: 14, top: 10, bottom: 10),child: Row(children: [CommonAvatarView.showBaseImage(_contactList[index].avatar),SizedBox(width: 12,),Text(_contactList[index].nickName, maxLines: 1,style: TextStyle(fontSize: 18, color: Colors.black, fontWeight: FontWeight.bold),),SizedBox(width: 12,),Expanded(child: SizedBox()),//自動擴展擠壓_getFriendsStatus(_contactList[index]),],),),);})): _noDataWidget()),],),);}//刪除對話框Future<void> _showDeleteDialog(String fromAccount, String toAccount) async {return showDialog<Null>(context: context,barrierDismissible: false,builder: (BuildContext context) {return AlertDialog(title: Text('確定要刪除該好友嗎?', style: new TextStyle(fontSize: 17.0)),actions: <Widget>[MaterialButton(child: Text('取消'),onPressed: (){LogUtils.d("確定取消");Navigator.of(context).pop();},),MaterialButton(child: Text('確定'),onPressed: (){LogUtils.d("確定刪除");Navigator.pop(context);_deleteContacts(fromAccount, toAccount);},)],);});}//刪除聯系人_deleteContacts(String fromAccount, String toAccount) async{bool deleteServerFlag = await ContactsRepository.getInstance().deleteContactsByAccountServer(fromAccount, toAccount);if(deleteServerFlag){bool deleteFlag = await ContactsRepository.getInstance().deleteContactsByAccount(fromAccount, toAccount);if(deleteFlag){CommonToast.show(context, "刪除成功!");_getData();} else {CommonToast.show(context, "刪除失敗!");}} else {CommonToast.show(context, "刪除失敗!");}}Widget _getFriendsStatus(ContactsBeanComb contactsBeanComb){String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);LogUtils.d("新的朋友 _getFriendsStatus ${account} , ${contactsBeanComb.fromAccount}, ${contactsBeanComb.toAccount}");if(contactsBeanComb.fromAccount == account) {LogUtils.d("已發送");return GestureDetector(onLongPress: (){_receiveFriends(contactsBeanComb);},child: Container(margin: EdgeInsets.only(left: 12.0, right: 12),child: Text("已發送"),),);} else if(contactsBeanComb.type == ContactsBean.typeRequest||contactsBeanComb.type == ContactsBean.typeRead){LogUtils.d("同意按鈕");return Container(margin: EdgeInsets.only(left: 12.0, right: 12),child: MaterialButton(color: Colors.green,textColor: Colors.white,child: Text("同意"),onPressed: (){LogUtils.d("新的朋友點擊添加");_receiveFriends(contactsBeanComb);},),);}return Text("");} }

總結

以上是生活随笔為你收集整理的Flutter高仿微信-第26篇-新的朋友的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人无遮挡在线视频 | 免费的黄色的视频 | 欧美不卡视频 | 欧美精品二区三区四区免费看视频 | 51调教丨国产调教视频 | 欧美卡一卡二卡三 | 日本在线免费观看 | 超碰一级片 | 久久国产劲爆∧v内射 | 国产黄色片网站 | 91丨porny丨| 天天躁日日躁bbbbb | 久久色在线视频 | 午夜精品一区二区在线观看 | 少妇高潮一区二区三区99刮毛 | 成人精品三级 | 一区二区三区爱爱 | 影音先锋中文字幕在线播放 | 大黑人交xxx极品hd | 天堂中文在线最新 | 亚洲黄一区 | 亚洲香蕉在线视频 | 深喉口爆一区二区三区 | 波多野结衣一区二区三区中文字幕 | 国产99在线 | 亚洲 | 亚洲欧美一区二区视频 | 国产日韩在线观看视频 | 777片理伦片在线观看 | 人人人爽| 国内久久 | 综合久久久久久 | 九色91在线 | 亚洲精品视频观看 | 国产99久久久国产精品 | 亚洲精品xxxxx | 看中国毛片| 久久嫩草精品久久久久 | 亚洲做受高潮无遮挡 | 日韩一二三四区 | 国产精品免费一区二区三区在线观看 | 97在线精品视频 | 特黄老太婆aa毛毛片 | 高清一区二区三区视频 | 国产精品传媒麻豆hd | 国产一区毛片 | 探花视频在线版播放免费观看 | 欧美日韩一级在线观看 | 亚洲免费激情视频 | 欧美日韩不卡一区二区三区 | 久久久久久免费精品 | 国内偷拍第一页 | 午夜剧场免费观看 | 自拍偷拍亚洲一区 | 午夜福利视频 | 中国女人和老外的毛片 | 精品美女久久久 | 国产黄色录相 | 欧美一区二区三区婷婷 | 蜜桃成熟时李丽珍国语 | 窝窝午夜看片 | 久草视频免费 | 可乐操亚洲 | 四虎国产精品永久在线国在线 | 看了让人下面流水的视频 | 古风h啪肉h文 | 久久在现| 成人av一区二区三区在线观看 | 国产精品影院在线观看 | 日韩av免费| 动漫美女舌吻 | 国产最新视频 | 91精品国产入口在线 | 日韩在线视频免费 | 欧美性生活一区二区 | 色悠悠在线视频 | 女人特黄大aaaaaa大片 | 亚洲一区三区 | 国产少妇在线 | 五月网| 91亚洲精品久久久久久久久久久久 | 黄色美女片 | 日韩a级大片 | 大尺度一区二区 | 国产免费a级片 | 中文精品一区二区三区 | 美女午夜激情 | 欧美大片免费在线观看 | 激情福利 | 日韩欧美中字 | 日本天堂影院 | 国产91在线视频 | 国产视频在线免费观看 | 蝌蚪自拍网站 | 懂色av一区二区三区 | 99成人精品视频 | 国产天天操 | 一本在线免费视频 | 国产伦精品一区二区三区网站 | 久色婷婷 |