利用Flutter写一个跨平台的果核APP(4)——数据存储
前言
目前我们已经实现了几个界面,今天这篇文章开始着手进行登录页的制作,主要流程就是获取输入框中的内容,发送给后台进行验证,如果成功将返回信息保存在本地并跳转至首页,如果失败就提示用户重新输入。 在这里面需要掌握3块知识,第一是flutter中的表单组件的使用,然后则是flutter中的数据存储,最后是网络请求。
效果
代码
上述三个部分我已经在其他文章中分别介绍了,详情点击相关文章的链接
- 《flutter表单组件》
- 《Flutter数据存储之shared_preferences》
- 《利用Flutter写一个跨平台的果核APP(3)——网络请求》
剩下的我就直接放出首页代码了:
import 'package:flutter/material.dart';
import 'package:flutter_guohe/constant//UrlConstant.dart';
import 'package:dio/dio.dart';
import 'package:flutter_guohe/views/customview.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_guohe/constant/SpConstant.dart';
import 'package:flutter_guohe/pages/app.dart';class LoginPage extends StatefulWidget {static String tag = 'login-page';@override_LoginPageState createState() => new _LoginPageState();
}class _LoginPageState extends State<LoginPage> {GlobalKey<FormState> _formKey = new GlobalKey<FormState>();String _account;String _password;//表单验证方法void _forSubmitted(BuildContext context) {var _form = _formKey.currentState;if (_form.validate()) {_form.save();login(context, _account.trim(), _password.trim());}}//登录void login(BuildContext context, String account, String password) {showDialog(context: context,builder: (context) {return new LoadingDialog(content: "登录中,请稍后......");});FormData formData =new FormData.from({"username": account, "password": password});Dio().post(Constant.STU_INFO, data: formData).then((res) {print(account + " " + password);if (res.statusCode == 200) {Navigator.pop(context);if (res.data['code'] == 200) {print(res.data);String name = res.data['info']['name'];String academy = res.data['info']['academy'];String major = res.data['info']['major'];String stu_id = res.data['info']['name'];String stu_pass = res.data['info']['password'];List<String> list = new List();list.add(name);list.add(academy);list.add(major);list.add(stu_id);list.add(stu_pass);store(list);Navigator.push(context,new MaterialPageRoute(builder: (context) => new Guohe()),);}}});}//将学生的相关信息保存至本地void store(List<String> list) async {SharedPreferences sharedPreferences = await SharedPreferences.getInstance();sharedPreferences.setBool(SpConstant.IS_LOGIN, true);sharedPreferences.setStringList(SpConstant.STU_INFO, list);}@overrideWidget build(BuildContext context) {final account = new TextFormField(autofocus: true,initialValue: '',decoration: new InputDecoration(labelText: '学号',),onSaved: (val) {_account = val;},);final password = new TextFormField(initialValue: '',obscureText: true,decoration: new InputDecoration(labelText: '密码',),onSaved: (val) {_password = val;},);final loginButton = new FloatingActionButton(backgroundColor: Colors.white,foregroundColor: Colors.black26,child: const Icon(Icons.arrow_forward),elevation: 18.0,onPressed: () => _forSubmitted(context),);final loginBox = new Container(width: 320.0,height: 250.0,margin: new EdgeInsets.only(top: 300.0, right: 30.0),child: new Stack(children: <Widget>[new Container(color: Colors.white,width: 280.0,height: 220.0,child: new Form(key: _formKey,child: new ListView(shrinkWrap: true,padding: new EdgeInsets.only(left: 24.0, right: 24.0),children: <Widget>[SizedBox(height: 48.0),account,new SizedBox(height: 15.0,),password,],),)),new Positioned(//方法二right: 15.0,top: 180.0,child: loginButton),],),);return new Scaffold(backgroundColor: Colors.white,body: new Container(decoration: new BoxDecoration(image: new DecorationImage(image: new AssetImage('assets/imgs/bg_login.webp'),fit: BoxFit.cover)),child: new Center(child: loginBox),),);}
}复制代码
利用Flutter写一个跨平台的果核APP(4)——数据存储相关推荐
- 利用Flutter写一个跨平台的果核APP(0)——介绍
前言 今年2月的时候,Google在开发者大会上推出了flutter的第一个预览版,我是在3月左右的时候才了解到这个全新的跨平台框架,并在阅读了相关文档之后写了一篇<你好,Flutter> ...
- 利用Flutter写一个跨平台的果核APP(1)——界面篇1
前言 从这里开始,我就准备边学边做边用博客记录下自己的重构历程,会结合已有的app的样式进行重构. 原图 先看一下app的截图: 上面两个截图是app的首页和左侧菜单栏的截图,首页下方是一个可以滑动的 ...
- 利用Flutter写一个跨平台的果核APP(3)——网络请求
前言 紧接上文界面篇,上文中在构建布局的时候因为是直接将文字图片显示出来的,所以消息类Message,和日知录类One都是采用的无状态的StatelessWidget类,这次我们需要调用接口,然后将返 ...
- 用 Flutter 写一个精美的登录页面(最新版)
用 Flutter 写一个精美的登录页面(最新版) 主体结构 标题 输入框 登录按钮 其他登录方式 注册按钮 完整源码 参考了博客:用flutter写一个精美的登录页面.但是那篇文章是 18 年的,较 ...
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
- 利用python写一个简单的双色球彩票系统
利用python写一个简单的双色球彩票系统 1.设置每次买的号码一样 写一个双色球彩票系统,系统可以随机产生一组数据,一组彩票数据有六位数,这六位数的的取值范围是0和1. 一张彩票是两块钱,用户可以选 ...
- python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密
原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...
- 利用Cocos2d-x写一个程序读取传奇wzl文件
Cocos2d-x是一个用于游戏开发的开源框架,它提供了用于制作2D游戏的工具和功能.若要利用Cocos2d-x读取传奇wzl文件,需要对wzl文件的格式进行分析,并使用Cocos2d-x提供的读取文 ...
- 利用itchat写一个聊天机器人
利用itchat写一个聊天机器人 聊天机器人 图灵机器人 需要的库 **自动回复私聊消息** **自动回复群聊消息** 结语: 聊天机器人 偶然在CSDN上看到大佬用20行教你写一个聊天机器人,觉得甚 ...
最新文章
- MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算
- 网络流题目详讲+题单(提高版)(持续更新中......)
- LeetCode【3--无重复的最长字串】 LeetCode【4--有序数组中的中位数】
- Tcpdump抓包命令使用
- CentOS6.5 安装MongoDB
- 如何高效学python编程_如何高效自学编程?天下没有难学的python
- access根据所属院系修改学号_2016年计算机二级《Access》冲刺试题及答案
- Java字符串查找第一个不重复字符_java如何实现获取字符串中第一个出现不重复的字符...
- java毕业设计鸿鹄教育培训mybatis+源码+调试部署+系统+数据库+lw
- 云服务优缺点_云服务器优点和缺点详细介绍
- c语言编码任务描述,C语言委派任务问题代码及解析
- 《纽约客》:还原真实的扎克伯格
- MySQL按照字符排序,英文,中文,数字综合排序
- 遐想:Android Nexus One Flan
- 电脑录音,教你电脑怎么录音
- nas与文件服务器对比,NAS网络存储设备为什么能取代文件服务器
- 城市轨道交通自动售检票系统
- 二本网络工程学生转型大数据开发,放弃京东offer,选择了二线城市
- linux socket netstat 状态 LISTENING、ESTABLISHED、SYN_SENT、CLOSE_WAIT、TIME_WAIT、FIN_WAIT2 分别是什么意思?
- win7删除系统自带中文简体输入法中美式键盘
热门文章
- NS_ASSUME_NONNULL_BEGIN 延伸
- ARM Linux 3.x的设备树(Device Tree)【转】
- android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题
- Exchange 分析器工具介绍及案例分析
- html左浮动不管用图片往下放,html - 如何在HTML / CSS中水平对齐图像(浮动和显示内联块不起作用) - 堆栈内存溢出...
- PHP的优点和缺点分别是什么,CSS的优点和缺点分别是什么
- java 中的内部类介绍
- Dos一键清理系统垃圾教程
- 怎样学会单片机?先学什么,怎么入门?
- java jsp转html_JSP页面转换为HTML页面,动态转静态