登录状态

import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:music/Login.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'RegisterDart.dart';
import 'MusicPlayer.dart';
import 'SplashPageLoading.dart';
import 'data/GetFocusListData.dart';

//main函数的runApp方法设置首页界面
void main() {
  // SharedPreferences.setMockInitialValues({});
  // runApp(Login());
  EasyLoading.dismiss();
  runApp(SplashPage());
  // runApp(SplashPageLoading());
}

class SplashPage extends StatelessWidget {
  SplashPage({key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MyApp());
  }
}

class MyApp extends StatefulWidget {
  const MyApp({Key key}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return Page();
  }
}

class Page extends State<MyApp> {
  bool loginState = false;

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

  //获取关注列表接口
  getFocusListDataMethod() async {
    try {
      var apiUrl = "http://47.242.63.216:9527/v1/focus/getst";

      SharedPreferences prefs = await SharedPreferences.getInstance();
      var tokens = prefs.getString("token");
      var userId = prefs.getInt("userId");

      //参数
      Map map = {};
      map["user_id"] = userId;
      Dio _dio = Dio();
      _dio.options.connectTimeout = 30000;
      _dio.options.receiveTimeout = 30000;
      _dio.options.sendTimeout = 30000;
      //网络请求添加token请求头
      Response result = await _dio.post(apiUrl,
          data: map, options: Options(headers: {"x-token": tokens}));

      //json解析
      Map<String, dynamic> nickname = json.decode(result.toString());
      var httpRes = GetFocusListData.fromJson(nickname);
      //如果token失效就跳转到账号登录界面
      if (httpRes.code == 401) {
        setState(() {
          loginState = false;
        });
        //如果token还没有失效就跳转到首页
      } else if (httpRes.code == 200) {
        setState(() {
          loginState = true;
        });
      }
    } on DioError catch (e) {
      //如果网络异常了,不知道是什么情况就直接重新登录
      setState(() {
        loginState = false;
      });
    }
  }
  Future<bool> _isLoging() async{
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //全局加载弹窗初始化,其他地方就直接显示和消失就可以了
      builder: EasyLoading.init(),
      home: FutureBuilder(
        future: _isLoging(),
        builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
        return loginState ? MusicPlayer() : Login();
      },)
    );
  }
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐