闲置后Flutter应用在启动时无响应

时间:2019-04-25 23:30:24

标签: dart flutter

我一直在开发一个应用程序,但我注意到在闲置一段时间后启动该应用程序不会加载。它只是挂在白屏上,并且反应迟钝。

我用try / catch包装主函数并显示错误,但是从未抛出异常,它只是冻结。如果我强行关闭应用程序,然后重新启动,它将再次起作用。据我所知,这仅发生在物理Pixel 3设备上的android上。

我的主要对象是异步的,所以我不确定是否与此有关。

当应用程序更新身份验证令牌时,我还检查了服务器日志,甚至没有被命中。

还有其他人遇到过这样的问题吗?

我正在运行的应用是在物理设备上调试生成的apk,这对于调试应用来说是否是已知的事情,而在发布模式下运行会消失吗?

import 'package:flutter/material.dart';
import './sharedServices/Auth.dart';
import './sharedServices/Environment.dart';
import './screens/Root/Root.dart';
import './contstants.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'utilities/JWT.dart';
import 'utilities/ApiGateway.dart';
import 'models/User.dart';

void main() async {
  try {
    User u;
    final storage = new FlutterSecureStorage();
    bool authenticated = false;
    List results = await Future.wait([
      storage.read(key: 'idToken'),
      storage.read(key: 'accessToken'),
      storage.read(key: 'refreshToken'),
      storage.read(key: 'firstName'),
      storage.read(key: 'lastName'),
      storage.read(key: 'email'),
      storage.read(key: 'refreshTokenExpiration')
    ]);
    if (results != null) {
      u = new User(results[3], results[4], results[5]);
      bool idTokenActive = JWT.isActive(results[0]);
      bool refreshTokenActive = JWT.refreshTokenActive(results[6]);
      if (!idTokenActive && !refreshTokenActive) {
        await storage.deleteAll();
      } else if (!idTokenActive && refreshTokenActive) {
        Map<String, dynamic> newTokens = await ApiGateway.refreshOutsideApp(
            results[5], DEV_API_BASE_URL, results[2]);
        if (newTokens['error'] != null) {
          await storage.deleteAll();
        } else {
          authenticated = true;
          await storage.write(key: 'idToken', value: newTokens['idToken']);
          await storage.write(
              key: 'accessToken', value: newTokens['accessToken']);
          await storage.write(
              key: 'refreshToken', value: newTokens['refreshToken']);
          await storage.write(
              key: 'refreshTokenExpiration',
              value: newTokens['refreshTokenExpiration'].toString());
        }
      } else {
        authenticated = true;
      }
    }
    return runApp(EnvironmentContainer(
      baseUrl: DEV_API_BASE_URL,
      child:
          AuthContainer(user: u, child: Root(authenticated: authenticated))));
  } catch(e) {
    return runApp(
      MaterialApp(
        title: 'ERROR',
        home: Scaffold(
          body: Container(
            child: Center(
              child: Text(
                e.toString(),
                style: TextStyle(
                  fontSize: 20
                ),
              ),
            ),
          ),
        ),
      )
    );
  }
}

0 个答案:

没有答案