簡單來說,就是要使用Router切換Widget時無法切換。
真正的原因是Router當真正要執行時呼叫程式設計給它的BuildContext參數,卻發現這個參數無法使用。
更具體來說,在很多地方(函數)會收到BuildContext傳入。
設計上會習慣在這些地方(函數)區段內將這些BuildContext傳給需要使用的功能,但偶爾會發生這些BuildContext不能使用的情況。
例如在AlertDialog裡取得的BuildContext就無法用在Router上。(因為Router會用這個BuildContext做定位、來知道Widget與Widget之間的關係,與它們在WidgetTree上的位置。而一個已經關閉的Dialog並不在WidgetTree上。)
解決這個錯誤的方法基本上是使用「GlobalKey」。
簡單來說就是在Widget的建構子/Build階段傳入一個GlobalKey物件的實體到「key」這個欄位中。確認傳入後,就可以在這個Widget下使用GlobalKey的「currentContext」這個參數去取得可用的BuildContext(A),然後在宣告Router並需要傳入BuildContext的地方改傳入BuildContext(A)。
沒有留言:
張貼留言