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