我有一個簡單的問題,我想我錯過了一些東西。我有一個名為的類CanvasState,它只是一個包含兩個List<Offset?>變數的資料類和CanvasHistory一個包含CanvasState. 現在,當我呼叫 的addState方法CanvasHistory將 a 添加CanvasState到statesList變數時,該List.add函式要么未執行,要么僅回傳呼叫函式。我對代碼進行了更精確的注釋。
import 'package:flutter/material.dart';
class CanvasHistory {
List<CanvasState> statesList = <CanvasState>[];
late int index = 0;
CanvasHistory({this.statesList = const <CanvasState>[]}) {
int length = statesList.length;
index = length - 1;
}
void addState(CanvasState state) {
print("adding state \n" state.toString()); // This print statement is printed
statesList.add(state); // somehow this code is not executed or returns
print("AFTER"); // This print statement is not executed.
}
}
class CanvasState {
final List<Offset?> _points;
final List<Offset?> _markerPoints;
CanvasState(this._points, this._markerPoints);
List<Offset?> get points {
return _points;
}
List<Offset?> get markerPoints {
return _markerPoints;
}
}
我不知道這里有什么問題。我沒有使用異步函式,這真的很奇怪,第二個列印陳述句沒有執行。
任何幫助將不勝感激,謝謝!
uj5u.com熱心網友回復:
好的,那么問題來了:
您的串列有一個默認值const <CanvasState>[],問題是您無法將專案添加到const陣列中。因此,當您嘗試時,該方法會引發錯誤并回傳(如果您查看除錯控制臺,您應該會看到類似“不支持添加操作”的錯誤)。
要解決此問題,您只需將默認值設為非常量。但是哦,哦!這是什么?
可選引數的默認值必須是常量。
達特又抱怨了。這是我的建議:
CanvasHistory({List<CanvasState>? statesList}) {
if (statesList != null) {
this.statesList = statesList;
}
int length = statesList.length;
index = length - 1;
}
可能有一個更清潔的解決方案,但這是我能想到的最簡單的解決方案。
此外,正如 Abhishek Thulasi 所說,您不需要late索引變數上的關鍵字,您可以將其洗掉,盡管我認為這不是導致錯誤的原因。
uj5u.com熱心網友回復:
問題是默認值將創建一個 const 串列,您無法向其中添加任何專案,因此您無法使用 add 方法而不會出現錯誤
一個解決方案是使用一個遲到的關鍵字,如
class CanvasHistory {
late List<CanvasState> statesList ;
late int index ;
CanvasHistory({List<CanvasState>? statesList}) {
this.statesList = statesList??[];
final length = this.statesList.length;
index = length - 1;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/464478.html
上一篇:List<dynamic>不是函式結果型別List<Itemshop>的子型別
下一篇:如何使小部件在顫動中按順序運行?
