この StatefulWidget は、条件に基づいて MySQL データベースからデータを取得し、取得した値を配列に追加して、配列の値を使用して ListView に表示できるようにするものです。私の問題は、配列 (_fileValues
) と _custUsername
変数が空であるか更新されていない場合に、例外がスローされないことです。
これは私のステートフル ウィジェット (main.dart
)
UsernameGetter
クラス (このクラスは、テキスト フィールド入力の電子メールに基づいてデータベース テーブルからユーザーのユーザー名を取得します)
UsernameGetter
クラスから _usernameDetected
クラスを出力すると、返された文字列の更新されたバージョンが返されますが、_custUsername
を に割り当てると、 UsernameValue
が main.dart
から削除されると、更新されず、場合によっては null 値が返されます。
NameGetter
クラス (テキスト列に格納されているユーザー項目名を取得)
NameGetter
クラスの場合、UsernameGetter
でも同じことが起こります。 main.dart
から値を取得し、その値を _fileValues
リストに追加すると、値が空になる場合や値が更新されない場合があります。
自分の間違いがどこにあるのかはわかりませんが、間違いがたくさんあることは間違いなく、それを理解するのを手伝ってくれる人が必要です。特に、リストと変数が更新されない、または空である場合がある理由に関してです。
参考リンク:
Flutter ListView が更新されていません
フラッターのリストがコード内で更新されません
フラッターで変数値が更新されないのはなぜですか?
###質問###
callData()このメソッドの簡略版は次のとおりです。
anotherAsyncFunction(foo)リーリー
上で述べたように、は
print()someAsyncFunction()
の直後、then()
> 代入の前に呼び出されます。 fooの値。
ステートメントを戦略的に挿入することで、この動作を自分で観察できます。
Future.then()###解決###
内部的には、と
async/
これらのいずれかを使用できますが、コードを読むときに理解しやすくするために、
awaitawait
は同じものです。ただし、async
/await
を使用すると、順次実行されるコードのように見えるため、非同期コードの動作を推測するのが容易になることがよくあります。async
/に移行することをお勧めします。
以下は、
リーリーcallData()
をリファクタリングする方法の例です:このように書くと、
custUsernameNameGetter().Connection(custUsername)
を呼び出す前にが割り当てられていることは明らかです。
非同期プログラミング: futures、async、await
を必ずお読みください。