我有以下代碼從要顯示在 listView 中的資料中過濾串列:
child: FutureBuilder(
future: fetchPacientes('todo'),
builder: (context, snapshot) {
if (snapshot.hasData) {
var filteredList = snapshot.data;
print("a minusculas:"
_controller.text.toLowerCase());
filteredList = filteredList
.where((element) => (element.nombre
.toLowerCase()
.contains(
_controller.text.toLowerCase()) ||
element.NHC.toLowerCase().contains(
_controller.text.toLowerCase()) ||
element.apellidos.toLowerCase().contains(
_controller.text.toLowerCase())))
.toList();
但我在這一點上遇到了一個錯誤:
.where(...
這是錯誤輸出:
The method 'where' can't be unconditionally invoked because the receiver can be 'null'.
我正在嘗試將舊應用程式遷移到 Null Safety,但我無法解決此問題。建議的解決方案是添加一個空檢查,filteredList! 但這樣做時錯誤不會被洗掉
uj5u.com熱心網友回復:
該錯誤意味著.應用 的物件(在本例中為filteredList)可以是,因此如果實際上是null,它將引發例外。filteredListnull
因此,為避免該錯誤,您有以下選擇:
- 添加
!afterfilteredList: 在這種情況下,您確保編譯器filteredList永遠不會為空,并且錯誤將消失。請注意,這實際上并不能阻止它成為null:您只是在向編譯器保證它,并且filteredList仍然可能是null. 在這種情況下,當您在代碼中宣告不應該發生這種情況時,應用程式將拋出一個專門的例外,告訴您它找到了一個“空”物件 - 檢查是否
filteredList是null:添加幾行代碼測驗是否是真的null,然后處理這種情況,甚至是回傳一個Text('filteredList is empty'). 在此之后,您可以安全地撰寫filteredList!,因為您確定它永遠不會null,因為您實際測驗了 id。 - 為它設定一個默認值
filteredList以防它為空:Dart 有這個運算子,如果它是一個物件,它會為它分配一個值null:filteredList ??= []。同樣,使用它之后,您可以安全地撰寫filteredList!,因為它永遠不會為空。
PS對不起,沒有注意到最后一句話。由于添加!和null檢查不起作用,我會嘗試為filteredList. 或者也許檢查nullon snapshot.data,然后為 設定一個顯式的不可為空的型別filteredList,比如List<Object> filteredList.
uj5u.com熱心網友回復:
錯誤是因為snapshot.data可以null。嘗試?在您.where喜歡之前添加一個:
filteredList = filteredList?.where(...);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/409983.html
標籤:
