我是 firebase 新手,正在嘗試使用 firebase 身份驗證器。目前我有 2 個 dart 檔案 - main.dart 和 user.dart。
在下面的 user.dart 中,我正面臨這個空安全問題。

在最后一行,我面臨錯誤:在 const 建構式中,無法將“Null”型別的值分配給“User”型別的引數。
因此,為了解決這個問題,我決定將第 7 行更改為final User? data;解決了這個問題。但是,問題現在出現在我的 main.dart 檔案中。
這是我的 main.dart 的快照

在第 25 行,我收到錯誤:引數型別“用戶?” 不能分配給引數型別“用戶”。
所以為了解決這個問題,我決定將第 25 行更改為(user) => CurrentUser.create(user!), . 添加“!”
當我現在運行我的代碼時,我收到了這個例外:
══╡ EXCEPTION CAUGHT BY PROVIDER ╞══════════════════════════════════════════════════════════════════
The following assertion was thrown:
An exception was throw by _MapStream<User?, CurrentUser> listened by
StreamProvider<CurrentUser>, but no `catchError` was provided.
Exception:
Null check operator used on a null value
════════════════════════════════════════════════════════════════════════════════════════════════════
有人可以解釋發生了什么以及我如何解決這個問題。謝謝!
uj5u.com熱心網友回復:
一旦data將類中的欄位設定CurrentUser為可為空的型別User?,您還必須更改類的第 12 行,將工廠方法接收的引數設定create()為User?。
像這樣:
factory CurrentUser.create(User? data){
return CurrentUser._(data, false);
}
uj5u.com熱心網友回復:
由于您嘗試null直接在建構式中將 NON-NULLABLE 變數顯式設定為 ,因此您會收到這些編譯時錯誤。
值得一提的另一件事是!在您的情況下使用運算子。當你使用!運算子時,你是在告訴 Dart,作為開發人員,你有責任確保變數不是null. 因此,由于您傳遞的變數確實是null,因此會引發運行時錯誤。
一旦您了解了 null 安全性,您的所有實作都可以大大簡化。例如isInitialValue引數可以很容易地去掉。
仔細閱讀Dart 的 Sound Null Safety檔案以了解這一點。
uj5u.com熱心網友回復:
使您的變數可以為空或添加!到您的用戶變數以檢查 null
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/481047.html
