WidgetFlutterBinding.에서 보장하는 사항이니셜라이즈() do?
저는 아래 코드 라인의 파이어베이스 패키지를 사용하려고 합니다.
이 코드 라인이 실제로 무엇을 하는지 정말 알고 싶습니다.
공식 문서는 저에게 큰 도움이 되지 않았습니다.누가 설명 좀 해주시겠어요?
다음과 같은 방식으로 사용해야 합니다.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
https://https.dev/dev/dll/adm/architecture-dll #architecture-delays
위의 이미지는 Flutter의 아키텍처 레이어입니다.WidgetFlutterBinding
는 Floatter 엔진과 상호 작용하는 데 사용됩니다. Firebase.initializeApp()
Firebase를 초기화하려면 네이티브 코드를 호출해야 하며, 플러그인은 플랫폼 채널을 사용하여 네이티브 코드를 호출해야 하므로 비동기식으로 수행되므로 호출해야 합니다.ensureInitialized()
당신이 그 예를 확실히 가지고 있는지 확인하기 위해.WidgetsBinding
.
문서에서:
위젯 바인딩의 인스턴스를 반환하고 필요한 경우 만들고 초기화합니다.작성된 경우 위젯 플러터 바인딩이 됩니다.하나가 이전에 초기화된 경우 위젯 바인딩을 구현합니다.
runApp을 호출하기 전에 바인딩을 초기화해야 하는 경우에만 이 메서드를 호출하면 됩니다.
소스 코드에서:
@override
Future<FirebaseAppPlatform> initializeApp(
{String name, FirebaseOptions options}) async {
if (name == defaultFirebaseAppName) {
throw noDefaultAppInitialization();
}
// Ensure that core has been initialized on the first usage of
// initializeApp
if (!isCoreInitialized) {
await _initializeCore();
}
// If no name is provided, attempt to get the default Firebase app instance.
// If no instance is available, the user has not set up Firebase correctly for
// their platform.
if (name == null) {
MethodChannelFirebaseApp defaultApp =
appInstances[defaultFirebaseAppName];
if (defaultApp == null) {
throw coreNotInitialized();
}
return appInstances[defaultFirebaseAppName];
}
assert(options != null,
"FirebaseOptions cannot be null when creating a secondary Firebase app.");
// Check whether the app has already been initialized
if (appInstances.containsKey(name)) {
throw duplicateApp(name);
}
_initializeFirebaseAppFromMap(await channel.invokeMapMethod(
'Firebase#initializeApp',
<String, dynamic>{'appName': name, 'options': options.asMap},
));
return appInstances[name];
}
그invokeMapMethod
지정된 인수를 사용하여 위의 채널에서 메서드를 호출하고, 이 메서드는 다음을 호출합니다.initializeApp()
네이티브 코드의 메소드, https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_core/firebase_core/android/src/main/java/io/flutter/plugins/firebase/core/FlutterFirebaseCorePlugin.java#L227
Firebase를 초기화하는 다양한 방법도 있습니다. 여기에서 확인할 수 있습니다.
Firebase App '[DEFAULT]'이 생성되지 않았습니다. Firebase를 호출합니다.Float 및 Firebase에서 App() 초기화
우리가 부르지 않는 다른 방법으로.WidgetsFlutterBinding.ensureInitialized()
이래로runApp()
함수는 내부적으로 호출합니다.
void runApp(Widget app) {
WidgetsFlutterBinding.ensureInitialized()
..scheduleAttachRootWidget(app)
..scheduleWarmUpFrame();
}
간단한 대답은 Flutter가 runApp을 호출하기 전에 네이티브 코드를 호출해야 하는 경우입니다.
WidgetsFlutterBinding.ensureInitialized()
;
에서는 플랫폼 채널을 사용하여 기본 코드를 호출하는 데 필요한 위젯 바인딩 인스턴스가 있는지 확인합니다.
runApp을 호출하기 전에 바인딩을 초기화해야 하는 경우에만 이 메서드를 호출하면 됩니다.
간단한 답변입니다. 주 기능이 비동기 키워드를 사용하는 경우 이 줄을 사용해야 합니다. 이 줄 안에서 wait 문을 사용하기 때문입니다.
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance(); // just an example
}
언급URL : https://stackoverflow.com/questions/63873338/what-does-widgetsflutterbinding-ensureinitialized-do
'programing' 카테고리의 다른 글
다른 ipynb 파일에서 ipynb 파일을 가져오시겠습니까? (0) | 2023.06.08 |
---|---|
파이썬의 복소수 (0) | 2023.06.08 |
유형 스크립트의 열거형 대 상수 차이 (0) | 2023.06.08 |
문자 배열의 null 종료 (0) | 2023.06.08 |
Oracle SQL 쿼리: 시간을 기준으로 그룹별 최신 값 검색 (0) | 2023.06.08 |