admin管理员组文章数量:1202196
My project is a hybrid Android and Flutter development. When the app is killed by the phone, and I go into the native page of the app, then enter the Flutter page, the Flutter page gets stuck. However, if I exit and re-enter, it works fine.
enter image description here my code
import 'dart:convert';
import 'dart:developer';
import 'package:attend_flutter/appConfig.dart';
import 'package:attend_flutter/common/common.dart';
import 'package:attend_flutter/common/platformApi.dart';
import 'package:attend_flutter/common/testSign.dart';
import 'package:attend_flutter/common/tools.dart';
import 'package:attend_flutter/components/initloading.dart';
import 'package:attend_flutter/data/responses/homePageRsponse.dart';
import 'package:attend_flutter/main.dart';
import 'package:attend_flutter/mock/data.dart';
import 'package:attend_flutter/models/NewGetUserPermissonsRsp.dart';
import 'package:attend_flutter/pages/home/home.dart';
import 'package:attend_flutter/pages/transGroup/EventBus.dart';
import 'package:attend_flutter/provider/authProvider.dart';
import 'package:attend_flutter/provider/authorizationManagementProvider.dart';
import 'package:attend_flutter/provider/themeProvide.dart';
import 'package:attend_flutter/provider/userProvider.dart';
import 'package:attend_flutter/routes/routes.dart';
import 'package:attend_flutter/utils/index.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
class AndroidMyApp extends StatefulWidget {
const AndroidMyApp({super.key});
@override
State<AndroidMyApp> createState() => _AndroidMyAppState();
}
class _AndroidMyAppState extends State<AndroidMyApp> {
Future<String>? _userInfoFuture;
Locale? _locale;
bool isLoading = false;
String? openURL;
static const platform = MethodChannel('flutter2/flutter2Java');
//设置透明状态栏
static const SystemUiOverlayStyle light = SystemUiOverlayStyle(
statusBarColor: Colors.transparent, statusBarBrightness: Brightness.dark);
@override
void initState() {
super.initState();
_init();
initEventChannel();
EventBusUtils.getInstance().on<ThemeEvent>().listen((event) {
ThemeMode mode = event.themeType == 0 ? ThemeMode.light : ThemeMode.dark;
context.read<ThemeProvide>().exchangeTheme(mode);
});
getUserInfo();
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (mounted) {
}
});
}
void initEventChannel() {
if (ProjcetConfig.isModule) {
PlatformApi.initListener().then((value) {
// 可以在这里处理返回值
}).catchError((Object err) {
toastShow(err.toString());
});
}
if (mounted) {
PlatformApi.getClientMethod('getThemeStyle');
}
SystemChannels.lifecycle.setMessageHandler((String? msg) async {
switch (msg) {
case "AppLifecycleState.paused":
break;
case "AppLifecycleState.inactive":
break;
case "AppLifecycleState.resumed":
break;
default:
break;
}
return; // setMessageHandler 需要一个返回值,因此加上这一行
});
}
setServerTIme() {
EventBusUtils.getInstance().fire({"eventType": 'serverTime'});
}
setCheckGps() {
EventBusUtils.getInstance().fire(OpenGPSEvent({"resumeNm": 1}));
}
@override
void dispose() {
super.dispose();
}
//初始化
void _init() {
//国际化文件初始化
//setLocalizedValues(localizedValues);
// setErrPage();
}
void setErrPage() async {
//设置flutter 错误页面防止爆红
ErrorWidget.builder = (FlutterErrorDetails flutterErrorDetails) {
return Material(
child: Center(
child: Column(
children: [
Text("数据异常,请联系开发人员",
style: TextStyle(color: getThemeColor(context, 'contentColor')),
textDirection: TextDirection.ltr),
Text(flutterErrorDetails.stack.toString(),
style: TextStyle(color: getThemeColor(context, 'contentColor')),
textDirection: TextDirection.ltr),
Text(flutterErrorDetails.exception.toString(),
style: TextStyle(color: getThemeColor(context, 'contentColor')),
textDirection: TextDirection.ltr),
],
)));
};
}
bool isDarkMode(BuildContext context) {
return Theme.of(context).brightness == Brightness.dark;
}
void hideKeyboard(BuildContext context) {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
FocusManager.instance.primaryFocus?.unfocus();
}
}
getUserInfo() async {
try {
if (ProjcetConfig.isModule) {
final userInfo = await platform.invokeMethod('getUserInfo');
UserData.getinstance().userInfo = json.decode(userInfo);
await context.read<UserModel>().setUserInfo(json.decode(userInfo));
var deviceName = context.read<UserModel>().deviceName;
await context.read<UserModel>().setPhoneName(deviceName);
final jumpUrl = await platform.invokeMethod("getJumpUrl");
await fetchInitData();
setState(() {
if(jumpUrl != "") {
openURL = jumpUrl;
}
isLoading = true;
});
} else {
Map<String, dynamic>? userInfo = await configUserInfo();
UserData.getinstance().userInfo = userInfo;
await context.read<UserModel>().setUserInfo(userInfo);
var deviceName = context.read<UserModel>().deviceName;
await context.read<UserModel>().setPhoneName(deviceName);
await fetchInitData();
setState(() {
isLoading = true;
});
}
} catch (err) {
print([err.toString(),'dsadasdadsa']);
setState(() {
isLoading = true;
});
}
}
Future<void> fetchInitData() async {
if (!mounted) return;
int kaoqin;
HomeAjax homeAjax = HomeAjax(context);
UserModel? userModel = context.read<UserModel>();
String? companyId = userModelpanyId;
String? aesUserId = userModel.aesUserId;
Map<String, dynamic> parmas = {'companyId': companyId};
var appIdRes = await homeAjax.getAppIdReq();
if (!mounted) return;
kaoqin = appIdRes.kaoqin;
WidgetsBinding.instance.addPostFrameCallback((_) async {
context.read<Auth>().setAppId(kaoqin);
});
// dynamic userFaceImageResult =
var reslut = await Future.wait([
homeAjax.getUserFaceImage(userModel),
homeAjax.getPrivilege(context, companyId!),
homeAjax.getPermissonsReq(aesUserId!, companyId, kaoqin),
homeAjax.checkOftenPunchOrg(parmas)
]);
var userFaceImageResult = reslut[0];
if (userFaceImageResult['code'] == 0) {
await context.read<AuthorizationManagementProvider>().updateAll();
} else if (userFaceImageResult['code'] == -1) {
await context.read<AuthorizationManagementProvider>().updateAccredit();
} else if (userFaceImageResult['code'] == -2) {
await context.read<AuthorizationManagementProvider>().updateFace();
}
var privilegeRes = reslut[1];
if (!mounted) return;
WidgetsBinding.instance.addPostFrameCallback((_) async {
context.read<Auth>().setManger(
privilegeRes.data.is_admin,
privilegeRes.data.is_department_manager,
privilegeRes.data.is_workgroup_manager,
);
});
NewGetUserPermissonsRsp permissionsRes = reslut[2];
if (!mounted) return;
context.read<Auth>().setOriList(permissionsRes.data?.tree);
context.read<Auth>().setAuthList(permissionsRes.data?.tree);
context.read<Auth>().setHasGet();
if (permissionsRes.data?.role != null) {
context.read<Auth>().setPermission(permissionsRes.data?.role?.range ?? 0);
context.read<Auth>().setIsAdmin(permissionsRes.data?.role?.data == 1);
}
var checkOftenPunchOrgRes = reslut[3];
if (checkOftenPunchOrgRes is String) {
context.read<Auth>().setSrchitecture(checkOftenPunchOrgRes);
} else {
context.read<Auth>().setSrchitecture("");
}
}
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(light);
ThemeProvide themeProvide = ThemeProvide();
return Consumer<ThemeProvide>(builder: (context, darkModeProvider, _) {
return MaterialApp(
//不显示debug角标
debugShowCheckedModeBanner: false,
onGenerateRoute: onGenerateRoute,
home: isLoading ? openURL != null ? newOpenURLWidget(context, openURL) : HomePage() :InitLoading() ,
title: AppConfig.appName,
builder: (context, child) => Scaffold(
body: GestureDetector(
onTap: () {
hideKeyboard(context);
},
child: child,
)),
theme: darkModeProvider.theme == ThemeMode.dark
? themeProvide.getThemeData(isDarkMode: true)
: themeProvide.getThemeData(),
// darkTheme: themeProvide.getThemeData(isDarkMode: true),
localizationsDelegates: const [
// ... app-specific localization delegate[s] here
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('zh', ''), // 中文
],
locale: const Locale('cn', ''),
// locale: _locale,
// localizationsDelegates: [
// //国际化
// GlobalMaterialLocalizations.delegate,
// GlobalWidgetsLocalizations.delegate,
// CustomLocalizations.delegate
// ],
//supportedLocales: CustomLocalizations.supportedLocales, //国际化
);
});
}
}
Only Android phones, such as Xiaomi phones
本文标签: flutter mixkill the appget stuck on the flutter pageStack Overflow
版权声明:本文标题:flutter mix, kill the app, get stuck on the flutter page - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738645146a2104544.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论