Flutter实现登录/退出登录

25 篇文章 0 订阅

话不多说,直接上代码(表单页面代码就不贴了,自己怎么喜欢怎么来,直接贴实现方法代码)

class LoginPage extends StatefulWidget {
  final arguments;

  LoginPage({Key key, this.arguments}) : super(key: key);
  _LoginPageState createState() => _LoginPageState(this.arguments);
}

class _LoginPageState extends State<LoginPage> {
  final arguments;
  _LoginPageState(this.arguments);

  @override
  void initState() {
    super.initState();
  }

  //监听登录页面销毁事件
  @override
  dispose () {
    super.dispose();
    //事件广播,当登录后返回上一页时,上一页不会执行initState方法,需要用到这个个方法
    eventBus.fire(new UserEvent("登录成功"));
  }

  //定义用户名和密码两个变量接收输入的值
  String username = "";   //电话号
  String password = "";   //密码
  //登录方法,在需要用到的地方把方法引入即可
  doLogin () async {
    if (this.username == "") {
      Fluttertoast.showToast(
        msg: "请输入用户名",
        gravity: ToastGravity.CENTER,
        timeInSecForIos: 3
      );
    } else if (password == "") {
      Fluttertoast.showToast(
        msg: "请输入密码",
        gravity: ToastGravity.CENTER,
        timeInSecForIos: 3
      );
    } else {
      //这里用的get方法发送数据,用post发送也可以,看个人喜好
      var api = "${Config.domain}user/loginUser?username=" + this.username+"&password="+this.password;
      var response = await Dio().get(api);
      if (response.data["success"]) {
        Fluttertoast.showToast(
          msg: "${response.data["message"]}",
          gravity: ToastGravity.CENTER,
          timeInSecForIos: 3
        );
        //登录成功后将用户信息保存到storage中,可以在其他需要用到验证登录信息的地方用到
        Storage.setString("userInfo", json.encode(response.data["data"]));
        Navigator.of(context).pop();
      } else {
        Fluttertoast.showToast(
          msg: "${response.data["message"]}",
          gravity: ToastGravity.CENTER,
          timeInSecForIos: 3
        );
      }
    }
  }  
}

当登录成功后返回上一页需要监听广播事件,首先下载依赖https://pub.dev/packages/event_bus,然后新建一个EventBus.dart用来定义要监听的事件,拿这个登录举例

import 'package:event_bus/event_bus.dart';

//事件广播,改变页面状态
EventBus eventBus = new EventBus();

class UserEvent {
  String str;
  UserEvent (String str) {
    this.str = str;
  }
}

然后在登录后返回的上一页监听广播事件

class HahaPage extends StatefulWidget {
  HahaPage Page({Key key}) : super(key: key);
  _HahaPageState createState() => _HahaPageState PageState();
}

class _HahaPageState extends State<HahaPage> {
    //用来验证登录状态
    //判断是否登录,默认给个false
    bool isLogin = false;
    //用户信息,默认为空
    List userInfo = [];

    _getUserInfo () async {
        var isLogin = await UserService.getUserLoginState();
        var userInfo = await UserService.getUserInfo();
        setState(() {
          this.userInfo = userInfo;
          this.isLogin = isLogin;
        });
    }

    @override
    void initState() {
      super.initState();
      //监听登录页面改变的事件
      eventBus.on<UserEvent>().listen((event){
        print(event);   //不出意外你的控制台会输出:登录成功
        //获取用户登录信息
        _getUserInfo();
      });
    }
}

新建UserService.dart,实现验证登录状态和获取用户信息方法,项目中需要这两个家伙的地方很多

import 'package:cso_app/services/Storage.dart';
import 'dart:convert';

class UserService {
  //获取用户信息
  static getUserInfo () async {
    List _userinfo;
    try {
      //从登录后存入storage中的信息获取用户信息
      List userInfoData = json.decode(await Storage.getString("userInfo"));
      _userinfo = userInfoData;
    } catch (e) {
      _userinfo = [];
    }
    return _userinfo;
  }

  //获取用户登录状态
  static getUserLoginState () async {
    var userInfo = await UserService.getUserInfo();
    if (userInfo.length > 0 && userInfo[0]["username"] != "") {
      return true;
    }
    return false;
  }

  //直接在这里把退出登录实现了吧,将storage中存储的信息清除即可
  static logOut () {
    Storage.remove("userInfo");
  }
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值