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

Flutter高仿微信-项目实践59篇,点击查看详情

效果图:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/9/23 22:51* Description : 登录*/
class Login extends StatelessWidget {const Login({super.key});@overrideWidget build(BuildContext context) {return const LoginPage(title: '登录页面');}
}class LoginPage extends StatefulWidget {const LoginPage({super.key, required this.title});final String title;@overrideState<LoginPage> createState() => _LoginPageState();
}class _LoginPageState extends State<LoginPage> {String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);final TextEditingController _usernameController = TextEditingController(text: "");final TextEditingController _passwordController = TextEditingController(text: "");String _username = '', _password = '';bool loadingVisible = false;//登录时loading对话框void _showLoadingDialog() {setState(() {loadingVisible = true;});Future.delayed(const Duration(seconds: 30),(){if(mounted){setState(() {loadingVisible = false;});}});}@overridevoid initState() {super.initState();//界面build完成后执行回调函数,WidgetsBinding.instance.addPostFrameCallback((_) => showServiceTermsDialog());}//第一次进入,弹出服务条款对话框void showServiceTermsDialog(){bool isServiceTerms =  SpUtils.getBool(CommonUtils.SERVICE_TERMS);if(!isServiceTerms){WnBaseDialog.showServiceTermsDialog(context);}}//登录void _login(String account, String password) async {bool isNetwork = await CommonNetwork.isNetwork();if(!isNetwork) {CommonUtils.showNetworkError(context);return;}if(account.isEmpty){CommonToast.show(context, "账号不能为空");return;} else if(password.isEmpty){CommonToast.show(context, "密码不能为空");return;}_showLoadingDialog();LogUtils.d('登录: username=${account.trim()}, password=${password.trim()}');XmppManager.getInstance().connect(account, password, loginCallback: (data) async{LogUtils.d("登录返回状态:${data} , ${mounted}");if(mounted){if(data){VideoCallUtils.getInstance().connect(context);SpUtils.setString(CommonUtils.LOGIN_ACCOUNT, account);SpUtils.setString(CommonUtils.LOGIN_PASSWORD, password);await UserRepository.getInstance().syncFirst(account, AppManager.getInstance().packageName);_joinMucGroup();CommonToast.show(context, "登录成功!");Navigator.pop(context, true);eventBus.emit(BaseEvent(BaseEvent.TYPE_LOGIN, result: {}));} else {CommonToast.show(context, "登录失败!");}setState(() {loadingVisible = false;});}});}//登录成功自动加入群,void _joinMucGroup() async {List<GroupBean>? list = await GroupRepository.getInstance().findAllGroup();list?.forEach((groupBean) {XmppManager.getInstance().joinMucGroup(groupBean.groupId??"");});}@overrideWidget build(BuildContext context) {return WillPopScope(child: Stack(children: [Scaffold(appBar: WnAppBar.getAppBar(context, Text(widget.title), type : WnAppBar.TYPE_LOGIN),body: Center(child: SingleChildScrollView(child: Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[_getRoundImage('assets/icons/app_icon.png', 100.0),SizedBox(height: 60,),_usernameAndPasswordWidget(),SizedBox(height: 30,),_getLoginButton(),SizedBox(height: 30,),_getRegisterButton(),],),),),),Offstage(child: CommonLoadingDialog(msg: "请稍后。。。",),offstage: !loadingVisible,),],), onWillPop: () async {//点击返回按钮,直接退出exit(0);});}//账号、密码Widget _usernameAndPasswordWidget(){return Container(margin: const EdgeInsets.only(left: 12, right: 12),child: Column(children: [TextField(controller: _usernameController,keyboardType: TextInputType.emailAddress,decoration: InputDecoration(hintText: "请输入账号",icon: const Icon(Icons.account_box,size: 20.0,),border: InputBorder.none,//使用 GestureDetector 实现手势识别suffixIcon: GestureDetector(child: Offstage(child: Icon(Icons.clear),offstage: _username == '',),//点击清除文本框内容onTap: () {setState(() {_username = '';_usernameController.clear();});},),),onChanged: (value) {setState(() {_username = value;});},),SizedBox(height:10),Container(height: 1,color: Colors.grey.shade400,),// 密码输入框TextField(obscureText: true,controller: _passwordController,keyboardType: TextInputType.text,decoration: InputDecoration(hintText: "请输入密码",icon: const Icon(Icons.lock_open,size: 20.0,),suffixIcon: GestureDetector(child: Offstage(child: Icon(Icons.clear),offstage: _password == '',),onTap: () {setState(() {_password = '';_passwordController.clear();});},),border: InputBorder.none,),onChanged: (value) {setState(() {_password = value;});},),Container(height: 1,color: Colors.grey.shade400,),],),);}//头像按钮Widget _getRoundImage(String imageName, double size) {return Container(width: size,height: size,clipBehavior: Clip.antiAlias,decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(size / 2)),),child: Image.asset(imageName,fit: BoxFit.fitWidth,),);}//登录按钮Widget _getLoginButton() {return MaterialButton(color: Colors.blue,textColor: Colors.white,padding: EdgeInsets.only(left: 28, top: 8, right: 28, bottom: 8),child: Text('登录',style: TextStyle(fontSize: 16),),onPressed: () {var username = _usernameController.text;var password = _passwordController.text;_login(username, password);},);}//注册按钮Widget _getRegisterButton() {return MaterialButton(color: Colors.blue,textColor: Colors.white,padding: EdgeInsets.only(left: 28, top: 8, right: 28, bottom: 8),child: Text('注册',style: TextStyle(fontSize: 16),),onPressed: () {Navigator.push(context, MaterialPageRoute(builder: (context) => Register()));//Navigator.pop(context, false);},);}}

Flutter高仿微信-第2篇-登录相关推荐

  1. Flutter高仿微信-第47篇-群聊-语音

     Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情 ...

  2. Flutter高仿微信-第36篇-单聊-语音通话

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 目前市 ...

  3. Flutter高仿微信-第31篇-单聊-表情

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情请 ...

  4. Flutter高仿微信-第46篇-群聊-表情

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情请 ...

  5. Flutter高仿微信-第48篇-群聊-图片

     Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情 ...

  6. Flutter高仿微信-第32篇-单聊-语音

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情请 ...

  7. Flutter高仿微信-第57篇-添加好友

     Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 实现 ...

  8. Flutter高仿微信-第59篇-同步数据

     Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 实现代码: / ...

  9. Flutter高仿微信-第3篇-主页

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

最新文章

  1. centos7最小安装没有 ifconfig netstat 命令
  2. 数据库查询性能优化之利器—索引(二)
  3. ElementUI的表单验证及常用规则
  4. Ghost网刻后window 7 sysprep无人值守应答文件制作
  5. BootstrapVue UI组件
  6. 计算机的网络与结构,计算机结构与组成29-网络.ppt
  7. 心算技巧 —— 大数的三次方根
  8. 微信抢红包插件xposed框架
  9. 合肥工业大学数值分析(计算方法)满分实验代码(python实现)
  10. msdtc.exe是微软分布式传输协调程序。该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务
  11. NTFS与FAT32区别大揭秘
  12. Android项目开发总结
  13. 前端,网页设计常用色彩搭配表
  14. Draggabilly中文文档
  15. java唱哪首歌好听_非常适合KTV演唱的100首新歌,Hold住全场,非常好听!
  16. 什么是linux云计算?用来做什么?
  17. 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance
  18. 2020年元宵节健康
  19. MySQL语句增加字段,修改字段名,修改类型,修改默认值
  20. eclipse java 测试_测试:LR中使用Eclipse来进行Java程序的测试方法

热门文章

  1. 最少交换次数python_史上最简单!冒泡、选择排序的Python实现及算法优化详解
  2. springboot 秒杀系统(一)
  3. 灯红酒绿的伤感空间日志:也许,我们都不是真正的快乐
  4. mysql max 获取另外值_来看看 MySQL 的这个 BUG,坑了多少人....
  5. ~QQ新版对对碰游戏外挂的制作方法~
  6. 计算机网络大作业telnet,计算机网络大作业-TCP包分析.pdf
  7. retrofit 会请求两次_基于RxJava2+Retrofit2简单易用的网络请求实现
  8. 爱情树 HTML+CSS告别源码,程序员教你如何表白
  9. 最近感受了下Vista主题
  10. SongTaste音乐下载器