TestWidgetsFlutterBinding.clock 變更
摘要
#現在 TestWidgetsFlutterBinding.clock
來自 package:clock
,而不是 package:quiver
。
背景
#flutter_test
套件正在移除其對較為龐大的 quiver
套件的相依性,改為相依於兩個更具針對性且較輕量的套件:clock
和 fake_async
。
這可能會影響使用者程式碼,這些程式碼會從 TestWidgetsFlutterBinding
取得時鐘,並將其傳遞給需要 package:quiver
中 Clock
的 API,例如像這樣的程式碼
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
移轉指南
#在此變更之後,您可能會看到的錯誤如下所示
Error: The argument type 'Clock/*1*/' can't be assigned to the parameter type 'Clock/*2*/'.
- 'Clock/*1*/' is from 'package:clock/src/clock.dart' ('<pub-cache>/clock/lib/src/clock.dart').
- 'Clock/*2*/' is from 'package:quiver/time.dart' ('<pub-cache>/quiver/lib/time.dart').
選項 1:從 package:clock Clock 建立 package:quiver Clock
#最簡單的遷移方式是從 package:clock
的時鐘建立一個 package:quiver
時鐘,這可以透過將 .now
函數的 tearoff 傳遞給 Clock
建構子來完成
遷移前的程式碼
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
遷移後的程式碼
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(Clock(tester.binding.clock.now));
});
選項 2:變更 API 以接受 package:clock Clock
#如果您擁有您正在呼叫的 API,您可能會想將其更改為接受來自 package:clock
的 Clock
。這是一個判斷,取決於有多少地方正在使用從 TestWidgetsFlutterBinding
取得的時鐘以外的東西來呼叫此 API。
如果您走這條路,則傳遞 tester.binding.clock
的呼叫點將不需要修改,但其他呼叫點將需要修改。
選項 #3:將 API 變更為接受 DateTime function()
#如果您僅將 Clock
用於其 now
函數,並且您控制 API,那麼您也可以將其更改為直接接受該函數,而不是 Clock
。這樣可以輕鬆地使用任何類型的 Clock
來呼叫,方法是傳遞任何類型時鐘中 now
方法的 tearoff
遷移前的呼叫程式碼
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
遷移後的呼叫程式碼
testWidgets('some test', (WidgetTester tester) {
modifiedApiThatTakesANowFunction(tester.binding.clock.now);
});
時程
#於版本中實裝:1.18.0
於穩定版本中發布:1.20
參考資料
#API 文件
相關的 PR
- PR 54125:移除 flutter_test quiver 依賴,改用 fake_async 和 clock
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。 頁面最後更新於 2024-04-04。 查看原始碼 或 回報問題。