與 Stream.listen() 相比,使用 StreamBuilder 的優勢是什么
void _authStateChanges() {
FirebaseAuth.instance.authStateChanges().listen(
(user) {
appNotifier.setUser(user);
if (_isInitializing) {
// first loading: show CircularProgress
_isInitializing = false;
notifyListeners();
}
},
onDone: () {
debugPrint("event onDone");
},
one rror: (e, s) {
debugPrint("event one rror $e");
},
);
}
如果更好地處理重建,與 StreamBuilder 相比有什么優勢?
uj5u.com熱心網友回復:
StreamBuilder的方法更好,因為
Stream#listen回傳一個流訂閱,當你使用它時需要取消它(否則它將是記憶體泄漏)。使用時StreamBuilder,流訂閱會自動處理,因此您不必處理它。在您的
Stream#listen方法中,您必須存盤兩個額外的變數:流訂閱,以便您可以稍后取消它,另一個欄位來檢查它是否已加載(在您的情況下,_isInitializing)。如果使用StreamBuilder,則不需要任何其他欄位(在某些情況下,您需要存盤流,但僅此而已)。
無論哪種方式,如果您查看源代碼,aStreamBuilder都是一個抽象Stream#listen。
uj5u.com熱心網友回復:
在我看來,這完全取決于應用程式的功能。在某些情況下,例如 a UserModel,您可能希望使用 a ,Stream#listen因為它會繼續監聽所述模型中的任何更改。然而,StreamBuilder只有當你在那個特定的班級時才會聽,并在離開那個班級后立即處理掉。用戶流是這樣的,您將增加資料庫的讀取,因為您必須在代碼中或多或少地使用它,因此在應用程式開始時呼叫它并在注銷時將其處理掉是更好的方法,因為它不會產生更多的讀取。簡而言之,它實際上取決于應用程式的用法和功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/350645.html
上一篇:型別'List<NewsHistoryModel>'不是型別轉換中型別'List<NewsHistoryModel>'的子型別
