在下面的代碼中,在“持續時間 = 持續時間”分配中出現“無效常量值”錯誤。
在“TimeField.fromElapsed”之前洗掉“const”可以解決“無效常量值”錯誤,但有人可以幫助我理解原因。(我是在 flutter 中使用 const 關鍵字的新手,我閱讀了一些關于它的文章,我認為現在了解它的基礎知識,但以下行為仍然令人困惑)
class TimeField extends StatelessWidget {
final Duration duration;
const TimeField({Key? key, required this.duration}) : super(key: key);
const TimeField.fromElapsed({Key? key, required int elapsed})
: duration = Duration(hours: elapsed, minutes: 0, seconds: 0),
super(key: key);
uj5u.com熱心網友回復:
第一個問題是您Duration在小部件的常量建構式中使用了一個非常量物件,因此您需要將其轉換為:
const TimeField.fromElapsed({Key? key, required int elapsed})
: duration = const Duration(hours: elapsed, minutes: 0, seconds: 0),
super(key: key);
但是隨后您面臨另一個問題,因為您將非常量值(elapsed變數)傳遞給Duration類的 const 建構式。所以你應該洗掉 const 關鍵字。
uj5u.com熱心網友回復:
甲const在達特變數意味著可以有其值定義為一個編譯時間常數的變數(其可具有它的值在編譯時計算的值,應用程式運行之前,這將是運行時)
const 值的示例:
'any string'
10 * 20 // (or any other mathematical operation with const inputs)
const Duration(seconds: 1) // Any Object that has a const constructor and you pass it const arguments
etc.
該Duration物件實際上有一個 const 建構式,如果你想在那里宣告一個 const Duration,你可以。但是此時編譯器可能不會將該elapsed變數識別為編譯時常量,因為它無法事先推斷出它的值
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/391680.html
