我有 3 個檔案
Main 包含應用程式啟動時的函式呼叫
void main() async {
await FunctionCall().numberColumnFunction();
runApp(const MyApp());
}
被呼叫函式和變數所在的函式:
class FunctionCall {
int numberColumn = 3;
int columnsPositioned = 5;
var visibilityColumn = false;
numberColumnFunction(){
if (numberColumn == 3) {
columnsPositioned = 8;
visibilityColumn = true;
}
else {
null;
}
}
}
和 ColumnView 我從函式中獲取變數以進一步使用它們:
// More code
end: width / FunctionCall().columnsPositioned,
// More code
visible: FunctionCall().visibilityColumn,
// More code
問題是在 ColumnView 中,我用默認值宣告的變數總是被呼叫
int columnsPositioned = 5;
var visibilityColumn = false;
即使滿足函式條件并且變數中的值發生變化,呼叫仍然會轉到舊值。執行函式后如何使 ColumnView 取值?
uj5u.com熱心網友回復:
我現在能想到的傳統和編程方式是使該類成為單例。您可以搜索單例類和工廠模式并進行更多研究。但是現在,這段代碼應該可以解決你的問題->
class FunctionCall {
FunctionCall._sharedInstance(); //This is a private constructor.
static final FunctionCall _shared = FunctionCall._sharedInstance(); // This is the instance we want to send every time.
factory FunctionCall() => _shared; // This is where we send it every time the class is created!
int numberColumn = 3;
int columnsPositioned = 5;
var visibilityColumn = false;
numberColumnFunction(){
if (numberColumn == 3) {
columnsPositioned = 8;
visibilityColumn = true;
}
else {
null;
}
}
}
基本上,問題是,每次你像這樣呼叫類時,FunctionCall()它都是在創建一個新類。并且新類將始終具有默認類資料。Bcz 該函式沒有在新類中被呼叫。因此,要停止創建類的新實體,您可以嘗試這種使類成為單例的方法。并在啟動時回傳完全相同的類實體!并做了!
uj5u.com熱心網友回復:
您正在主函式內創建 FunctionCall() 物件。此物件的可見性列為真。但是,您正在 ColumnView 小部件內創建一個新的 FunctionCall() 物件。此物件的 visibilityColumn 值最初設定為 false。它們是兩個不同的物件。
我的建議:
FunctionCall functionCall = FuncitonCall();
全域定義上述代碼。在 main 中編輯此物件并在 ColumnView 小部件中使用相同的物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/511279.html
標籤:扑功能镖变量称呼
上一篇:尋址堆疊變數
