'Error: Couldn't resolve the package 'path_provider' in 'package:path_provider/path_provider.dart' if (dart.library.io) import using

I know that the path_provider is not meant for the web. And I'm trying to separate implementations for web and mobile platforms through imports of the respective files, however, I get an error ONLY when compiling.

Please help me.

Error:

Error: Couldn't resolve the package 'path_provider' in 'package:path_provider/path_provider.dart'.
packages/locale_cache/lib/database/database_helper_mobile.dart:12:8: Error: Not found: 'package:path_provider/path_provider.dart'
import 'package:path_provider/path_provider.dart' as paths;
       ^
packages/locale_cache/lib/database/database_helper_mobile.dart:21:33: Error: Method not found: 'getApplicationDocumentsDirectory'.
        final dir = await paths.getApplicationDocumentsDirectory();
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
packages/locale_cache/lib/database/database_helper_mobile.dart:42:29: Error: Method not found: 'getApplicationDocumentsDirectory'.
    final dir = await paths.getApplicationDocumentsDirectory();
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Unhandled exception:
FileSystemException(uri=org-dartlang-untranslatable-uri:package%3Apath_provider%2Fpath_provider.dart; message=StandardFileSystem only supports file:* and data:* URIs)
#0      StandardFileSystem.entityForUri (package:front_end/src/api_prototype/standard_file_system.dart:34:7)
#1      asFileUri (package:vm/kernel_front_end.dart:623:37)
#2      writeDepfile (package:vm/kernel_front_end.dart:763:21)
<asynchronous suspension>
#3      FrontendCompiler.compile (package:frontend_server/frontend_server.dart:586:9)
<asynchronous suspension>
#4      starter (package:flutter_frontend_server/server.dart:85:12)
<asynchronous suspension>
#5      main (file:///C:/b/s/w/ir/cache/builder/src/flutter/flutter_frontend_server/bin/starter.dart:13:24)
<asynchronous suspension>

dependencies:

dev_dependencies:
  build_runner: 2.1.7
  drift_dev: 1.4.0
  flutter_lints: 1.0.0
  flutter_test:
    sdk: flutter
  injectable_generator: 1.5.2
  path_provider: 2.0.2

Common file

import 'package:drift/drift.dart';
import 'package:drift/isolate.dart';
import 'package:locale_cache/database/database_getter.dart';

abstract class DatabaseHelper {
  factory DatabaseHelper() => getDatabaseHelper();

  LazyDatabase createConnection({bool logStatements = false}) => throw Exception('Platform not supported');

  Future<DriftIsolate> createDriftIsolate({bool logStatements = false}) async => throw Exception('Platform not supported');
}

database_getter.dart

import 'package:locale_cache/database/database_helper.dart';

DatabaseHelper getDatabaseHelper() => throw UnsupportedError('Cannot create abstract class');

database_helper_web.dart

import 'package:drift/drift.dart';
import 'package:drift/isolate.dart';
import 'package:locale_cache/database/database_helper.dart';

class DatabaseHelperWeb implements DatabaseHelper {
  @override
  LazyDatabase createConnection({bool logStatements = false}) => throw Exception('Platform not supported');

  @override
  Future<DriftIsolate> createDriftIsolate({bool logStatements = false}) => throw Exception('Platform not supported');
}

DatabaseHelper getDatabaseHelper() => DatabaseHelperWeb();

database_helper_mobile.dart

import 'dart:async';
import 'dart:io';
import 'dart:isolate';

import 'package:drift/drift.dart';
import 'package:drift/isolate.dart';
import 'package:drift/native.dart';
import 'package:flutter/material.dart';
import 'package:locale_cache/database/database_helper.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart' as paths;

class DatabaseHelperMobile implements DatabaseHelper {

  @override
  LazyDatabase createConnection({bool logStatements = false}) {
    // some work
  }

  @override
  Future<DriftIsolate> createDriftIsolate({bool logStatements = false}) async {
    // some work
  }

}

DatabaseHelper getDatabaseHelper() => DatabaseHelperMobile();

How I use it

import 'package:locale_cache/database/database_helper.dart' if (dart.library.html) 'database_helper_web.dart' if (dart.library.io) 'database_helper_mobile.dart';

final DatabaseHelper _databaseHelper = DatabaseHelper();

P.s. I have tried flutter clean and pub get



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source