flutter登录状态
登录状态
·
登录状态
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();
},)
);
}
}
更多推荐
已为社区贡献68条内容
所有评论(0)