I am trying to use Hive database in my flutter project. In order to use hive db I will have to use path_provider package. I installed that too. but when I run the app again or restart it is neither running nor restarting and getting this error.
Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)
E/flutter (15905): #0
PathProviderApi.getApplicationDocumentsPath
package:path_provider_android/messages.g.dart:9
ANDROID MANIFEST FILE PERMISSIONS
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
/>
MY CODE
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final document = await getApplicationDocumentsDirectory(); // ERROR AT THIS LINE
Hive.init(document.path);
runApp(const MyApp());
}
CodePudding user response:
If you are using Android use getApplicationSupportDirectory
it will get the getFilesDir
Path. For More refer this link
https://github.com/flutter/plugins/blob/main/packages/path_provider/path_provider/lib/path_provider.dart to get the API's support for Android
and iOS
CodePudding user response:
Adding permission in AndroidManifest.xml
file is like defining all the permission you may use in your app. but to actually use those permissions, you need to ask user to allow those permissions like using internal/external storage. One way to do this is with permission_handler package.
CodePudding user response:
Actually, I didn't put any uses-permission in Maneifest file to use Hive. Instead of Hive.init(), I would like to suggest to use Hive.initFlutter(). But without
final document = await getApplicationDocumentsDirectory();
inside initFlutter() method, these actions are already done by itself.