shared_preferences
iOS 및 Android 용 Flutter 응용 프로그램에서 사용 하고 있습니다. 웹에서 http:dart
종속성 ( window.localStorage
) 자체를 사용하고 있습니다. 웹용 Flutter가 Flutter 저장소에 병합되었으므로 크로스 플랫폼 솔루션을 만들고 싶습니다.
이것은 두 개의 별도 API를 가져와야 함을 의미합니다. 이것은 아직 Dart에서 잘 지원되지 않는 것 같지만 이것이 내가 한 일입니다.
import 'package:some_project/stub/preference_utils_stub.dart'
if (dart.library.html) 'dart:html'
if (dart.library.io) 'package:shared_preferences/shared_preferences.dart';
내 preference_utils_stub.dart
파일에서 컴파일 타임에 표시 해야하는 모든 클래스 / 변수를 구현했습니다.
Window window;
class SharedPreferences {
static Future<SharedPreferences> get getInstance async {}
setString(String key, String value) {}
getString(String key) {}
}
class Window {
Map<String, String> localStorage;
}
컴파일하기 전에 모든 오류를 제거합니다. 이제 응용 프로그램이 웹을 사용하고 있는지 확인하는 몇 가지 방법을 구현했습니다.
static Future<String> getString(String key) async {
if (kIsWeb) {
return window.localStorage[key];
}
SharedPreferences preferences = await SharedPreferences.getInstance;
return preferences.getString(key);
}
그러나 이것은 많은 오류를 제공합니다.
lib/utils/preference_utils.dart:13:7: Error: Getter not found:
'window'.
window.localStorage[key] = value;
^^^^^^ lib/utils/preference_utils.dart:15:39: Error: A value of type 'Future<SharedPreferences> Function()' can't be assigned to a
variable of type 'SharedPreferences'.
- 'Future' is from 'dart:async'.
- 'SharedPreferences' is from 'package:shared_preferences/shared_preferences.dart'
('../../flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.4+3/lib/shared_preferences.dart').
SharedPreferences preferences = await SharedPreferences.getInstance;
^ lib/utils/preference_utils.dart:22:14: Error: Getter not found:
'window'.
return window.localStorage[key];
등등. 이러한 오류없이 플랫폼에 따라 다른 방법 / 클래스를 어떻게 사용할 수 있습니까? 선호도뿐만 아니라이 방법으로 더 많은 종속성을 사용하고 있습니다. 감사!
앱이 웹에서 실행되도록 컴파일되었는지 여부를 알려주는 전역 부울 kIsWeb을 사용할 수 있습니다. 문서 : api.flutter.dev/flutter/foundation/kIsWeb-constant.html if (kIsWeb) {// 웹에서 실행 중! 초기화 웹 DB} 다른 {// 사용 공유 환경 설정}
—
Shamik Chodankar
localstorage
과shared preferences
의존성 이 없어야합니다 . 이는 컴파일러가 이러한 종속성 중 하나를 트리 쉐이킹 할 수 없음을 의미합니다. 이상적으로 가져 오기는 이러한 구현을 숨겨야합니다. 명확한 구현 예를 생각해 보겠습니다.