目標
使用setState沒有重繪的其他部件
我做了什么
我正在使用youtube_player_flutter來顯示 YouTube 視頻。
String id;
YoutubePlayerController _youtubeController =
YoutubePlayerController(
initialVideoId: id,
flags: YoutubePlayerFlags(....);
//Then call this:
YoutubePlayer(
controller: _youtubeController,
showVideoProgressIndicator: true,
),
同樣,StatefulWidget我有一個Text,Button和YoutubePlayer。
String str = "abc";
//in Column or Row
Text(str),
ElevatedButton(child: Text("Push"), onPressed: () { setState((){ str = "ABC" });}),
YoutubePlayer(
controller: _youtubeController,
showVideoProgressIndicator: true,
),
問題
當我打電話時setState,YoutubePlayer重繪 。這意味著重新加載 Youtube 視頻,并初始化進度。
我不能定義YoutubePlayer為 const 因為initialVideoId是不確定的。
撲醫生
[√] Flutter (Channel beta, 2.6.0-5.2.pre, on Microsoft Windows [Version 10.0.22000.282], locale ja-JP)
? Flutter version 2.6.0-5.2.pre at D:\src\flutter_windows_2.5.0-stable\flutter
? Upstream repository https://github.com/flutter/flutter.git
? Framework revision 400608f101 (7 weeks ago), 2021-09-15 15:50:26 -0700
? Engine revision 1d521d89d8
? Dart version 2.15.0 (build 2.15.0-82.2.beta)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
? Android SDK at D:\Android
? Platform android-30, build-tools 29.0.3
? Java binary at: D:\Program Files\Android\Android Studio\jre\bin\java
? Java version OpenJDK Runtime Environment (build 11.0.8 10-b944.6842174)
? All Android licenses accepted.
[√] Chrome - develop for the web
? Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Android Studio (version 4.2)
? Android Studio at D:\Program Files\Android\Android Studio
? Flutter plugin can be installed from:
https://plugins.jetbrains.com/plugin/9212-flutter
? Dart plugin can be installed from:
https://plugins.jetbrains.com/plugin/6351-dart
? Java version OpenJDK Runtime Environment (build 11.0.8 10-b944.6842174)
[√] VS Code (version 1.61.2)
? VS Code at C:\Users\yukik\AppData\Local\Programs\Microsoft VS Code
? Flutter extension version 3.27.0
[√] Connected device (3 available)
? Android SDK built for x86 (mobile) ? emulator-5554 ? android-x86 ? Android 10 (API 29) (emulator)
? Chrome (web) ? chrome ? web-javascript ? Google Chrome 95.0.4638.54
? Edge (web) ? edge ? web-javascript ? Microsoft Edge 95.0.1020.40
? No issues found!
uj5u.com熱心網友回復:
setState 重繪 小部件本身及其子小部件。因此,如果您將要重繪 的小部件放在 YouTube 播放器下方的級別上,它不會重繪 該播放器
uj5u.com熱心網友回復:
好吧, setState 正是這樣做的,它重繪了所有頁面。如果只想重繪一個小部件,則必須使用流/狀態管理。這就是為什么使用 setState 不是一個好的做法,成本/收益太高。嘗試使用 MobX、GetX、RxDart、Cubit 進行狀態管理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343514.html
下一篇:未選擇芯片時如何禁用按鈕?
