[解決済み] Dartは参照渡しになりますか?[重複あり]
2022-02-15 03:50:40
質問
この記事の中で Flutter video_player ディスポーザブル
何かを廃棄して、再び使用できるようにする方法を尋ねました。提供された回答は正しく機能しますが、この質問が残りました。
このコードはなぜ意図したとおりに動作するのでしょうか?
videoController
を使って
oldController
final oldController = videoController;
WidgetsBinding.instance.addPostFrameCallback((_) async {
await oldController.dispose();
_initController(link); //contains reassignment of videoController = VideoController.network(...)
});
C言語などでは、ポインタの利用が必要です(私の好きな方法というべきでしょうか)。参照を渡すには、新しい値を代入して、古い値の面倒を見る。
解決方法は?
私の回答があなたを混乱させたままにしておいて申し訳ありません。はい、Dartでは、Javaと同じようにオブジェクトへの参照を使用して作業します。このコードが意図したとおりに動作する理由を明らかにするために、短い例を挙げます。
void main() {
final t = Test(Test());
t.removeField();
}
class Test {
Test t;
Future<void> removeField() async {
print('current field: $t');
Future.delayed(Duration(seconds: 2)).then((_) => print('delayed value: $t'));
t = null;
}
Test([this.t]);
}
を印刷します。
current field: Instance of 'Test'
delayed value: null
この場合、まずfieldの値がnullに設定され、その2秒後にコールバックが実行されます。オブジェクトのフィールドにアクセスするのだが、すでにnullになっている。しかし、このようにすると
final old = t;
Future.delayed(Duration(seconds: 2)).then((_) => print('delayed value: $old'));
と表示されます。
current field: Instance of 'Test'
delayed value: Instance of 'Test'
フィールドの前の値を保存してコールバックに渡しているので、NULLになったフィールドにアクセスすることはありません。
関連
-
[解決済み】zsh: コマンドが見つかりません: flutter 【終了しました
-
[解決済み] Flutter - くねくね動くアニメーションを作るには?
-
[解決済み] flutterで文字に下線を引く方法
-
[解決済み] DartでSingletonを構築する方法とは?
-
[解決済み】Dartで日付をフォーマットする方法とは?
-
[解決済み】ダーツのダブルドット(.)の使い方をリストアップしてみる?
-
[解決済み] Dartのasyncとasync*の違いは何ですか?
-
[解決済み] Dartでインデックスと値でリストを列挙またはマップする
-
[解決済み] 画面の高さと幅の決め方
-
[解決済み] Flutterアプリのビルド番号とバージョン番号を取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
flutter TextField 入力ボックスコンポーネント
-
[解決済み] FlutterでListViewをColumnに追加する方法とは?
-
[解決済み] Flutterでgoogleとyoutubeの両方にログインする
-
[解決済み] Flutterでウィジェットにボーダーを追加するには?
-
[解決済み】オンスクリーンキーボードを解除するにはどうしたらいいですか?
-
[解決済み】Flutterアプリにスプラッシュスクリーンを追加する
-
[解決済み】flutterのwrap_contentとmatch_parentに相当するもの?
-
[解決済み] appBarのバックボタンの色を変更する方法
-
[解決済み] Flutterで「戻る」ボタンを上書きするには?[重複している]。
-
[解決済み] dispose() の後に setState() が呼ばれる。