In an Android release build of our Flutter app, we call getApplicationDocumentsDirectory
in main.dart (after WidgetsFlutterBinding.ensureInitialized();
) in order to initialize Hive (3rd party library used for storage). This has resulted in a crash that only occurs in release builds.
The stacktrace we’re receiving in crashlytics is as follows:
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: PlatformException(channel-error, Unable to establish connection on channel., null, null)
at PathProviderApi.getApplicationDocumentsPath(messages.g.dart:86)
at .getApplicationDocumentsDirectory(path_provider.dart:121)
at HiveX.initFlutter(hive_extensions.dart:12)
at .setupHive(hive_utils.dart:15)
at .main(main.dart:118)
Here’s what’s in my main.dart file:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
// Register crashlytics handlers.
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterError(errorDetails,
fatal: !(errorDetails.exception is HttpException ||
errorDetails.exception is SocketException ||
errorDetails.exception is HandshakeException ||
errorDetails.exception is ClientException));
};
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
// getApplicationDocumentsDirectory called under the hood here
await Hive.initFlutter();
await Future.wait(boxes.map((box) async {
await Hive.openBox<String>(box);
}).toList());
runApp(MyApp());
}