AI_Drawing/lib/tools/start_page.dart
2024-06-03 15:30:15 +08:00

251 lines
7.5 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:aiplot/tools/start_model.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:device_info/device_info.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../bean/user_bean.dart';
import '../common/Global.dart';
import '../generated/l10n.dart';
import '../network/NetworkConfig.dart';
class StartPage extends StatefulWidget {
StartPage({Key? key, this.thisParams}) : super(key: key);
final Map<String, dynamic>? thisParams;
@override
_StartPageState createState() => _StartPageState();
}
class _StartPageState extends State<StartPage> {
static final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
StreamSubscription? subscription;
final StartModel _viewModel = StartModel();
@override
void didChangeDependencies() {
super.didChangeDependencies();
}
// 获取原生的值
invokeNativeMethod(String method, Map<String, dynamic> map) async {
dynamic args;
try {
args = await Global.method.invokeMethod(method, map);
} on PlatformException catch (e) {}
}
//获取用户验签
getUser() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String userName = prefs.getString("UserBean")!;
if (userName != null && userName.isNotEmpty) {
Map<String, dynamic> responseData = jsonDecode(userName);
UserBean bean = UserBean.fromJson(responseData);
NetworkConfig.userId = bean.userId!;
NetworkConfig.token = bean.token!;
NetworkConfig.userToken = bean.userToken!;
Map<String, String> map = {
"userId": NetworkConfig.userId,
"token": NetworkConfig.token,
"userToken": NetworkConfig.userToken,
};
invokeNativeMethod("userData", map);
} else {
NetworkConfig.userId = "";
NetworkConfig.token = "";
NetworkConfig.userToken = "";
}
}
geLanguageSw() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String? NetworkSet = prefs.getString("LanguageSw");
return NetworkSet;
}
getIsFirst() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String? IsFirst = prefs.getString("IsFirst");
return IsFirst;
}
setIsFirst() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("IsFirst", "1");
}
cleanUser() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("UserBean", "");
}
var nTime;
@override
void initState() {
// TODO: implement initState
super.initState();
var nowTime = DateTime.now(); //获取当前时间
nTime = nowTime.millisecondsSinceEpoch; //单位是毫秒(千分之一秒)13位时间戳
if (Platform.isIOS) {
subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
// Got a new connectivity status!
if (result == ConnectivityResult.mobile || result == ConnectivityResult.wifi) {
setState(() {
getServerInfo();
});
}
});
}
//网络请求回调
subscription = _viewModel.streamController.stream.listen((newData) {
String code = newData['code'];
if (code.isNotEmpty) {
switch (code) {
case "getServerList":
//获取配置
_viewModel.getAppConfig();
break;
case "getAppConfig":
if (!NetworkConfig.isTest) {
if (NetworkConfig.userId == "") {
//进入首页
Navigator.of(context).pushReplacementNamed('/HomePage');
} else {
//请求用户信息接口,判断用户验签是否过期
_viewModel.getUserData();
}
} else {
_viewModel.userLogin();
}
break;
case "visitorLogin": //游客登录
Navigator.of(context).pushReplacementNamed('/HomePage');
break;
case "getUserData": //验签成功
//进入首页
Navigator.of(context).pushReplacementNamed('/HomePage');
break;
case "userTokenExpire": //用户token过期,重置信息
cleanUser();
NetworkConfig.userId = "";
NetworkConfig.token = "";
NetworkConfig.userToken = "";
Navigator.of(context).pushReplacementNamed('/HomePage');
break;
default:
Navigator.of(context).pushReplacementNamed('/HomePage');
break;
}
}
setState(() {});
});
//初始化信息
initData();
}
// 获取原生的值
Future<void> initData() async {
try {
Future<dynamic> IsFirst = getIsFirst(); //是否首次打开
IsFirst.then((dynamic bean) {
initApi();
});
} on PlatformException catch (e) {}
}
//初始化信息
initApi() async {
initPlatformState();
getUser();
//原生回调参数
dynamic headers = await Global.method.invokeMethod("getRequestHeaders");
Map<String, dynamic> headersMap = Map<String, dynamic>.from(headers);
NetworkConfig.AppId = headersMap["AppId"];
NetworkConfig.BossId = headersMap["BossId"];
NetworkConfig.Version = headersMap["Version"];
NetworkConfig.CPU = headersMap["CPU"];
NetworkConfig.imsi = headersMap["imsi"];
NetworkConfig.ip = headersMap["ip"];
NetworkConfig.timeZone = headersMap["timeZone"];
NetworkConfig.statusHeight = headersMap["statusHeight"];
Future<dynamic> isLanguageSw = geLanguageSw();
isLanguageSw.then((dynamic bean) {
if (bean != null && bean != "") {
NetworkConfig.Language = bean;
} else {
String lc = Localizations.localeOf(context).languageCode;
if (lc != "zh") {
if (lc != "ja") {
NetworkConfig.Language = "en";
} else {
NetworkConfig.Language = Localizations.localeOf(context).languageCode;
}
} else {
NetworkConfig.Language = Localizations.localeOf(context).languageCode;
}
}
S.load(Locale.fromSubtags(languageCode: NetworkConfig.Language));
});
getServerInfo();
}
//获取设备信息
Future<void> initPlatformState() async {
try {
if (Platform.isAndroid) {
var build = await deviceInfoPlugin.androidInfo;
NetworkConfig.deviceID = build.androidId;
NetworkConfig.systemVersion = build.version.release;
} else if (Platform.isIOS) {
var build = await deviceInfoPlugin.iosInfo;
NetworkConfig.deviceID = build.identifierForVendor;
}
} on PlatformException {}
Map<String, String> map = {"SensorsAnaly": "0"};
invokeNativeMethod("initAPI", map);
}
//获取服务信息
getServerInfo() {
_viewModel.getServerList();
}
@override
void dispose() {
subscription?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
backgroundColor: Colors.white,
body: Stack(
children: [
Container(
width: double.infinity,
height: double.infinity,
child: const Image(
fit: BoxFit.fitHeight,
height: double.infinity,
image: AssetImage('assets/images/kpy.png'),
)),
],
));
}
}