我有一个小部件,当单击它时,它会保存一个 ID 号,覆盖一个 CircularProgressIndicator 1000 毫秒,然后弹出进度指示器并将用户路由到另一个页面。
ProgressIndicator 和 Timer 的这一位是新的,并且破坏了我的单元测试,现在给我以下错误:
The following assertion was thrown running a test:
'package:flutter_test/src/binding.dart': Failed assertion: line 574 pos 12: '() {
'A Timer is still pending even after the widget tree was disposed.';
return _fakeAsync.nonPeriodicTimerCount == 0;
}': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new
When the exception was thrown, this was the stack:
#2 AutomatedTestWidgetsFlutterBinding._verifyInvariants (package:flutter_test/src/binding.dart:574:12)
#3 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:415:7)
<asynchronous suspension>
#7 TestWidgetsFlutterBinding._runTest (package:flutter_test/src/binding.dart:392:14)
#8 AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:549:24)
#14 AutomatedTestWidgetsFlutterBinding.runTest (package:flutter_test/src/binding.dart:547:16)
#15 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:54:50)
#16 Declarer.test.<anonymous closure>.<anonymous closure> (package:test/src/backend/declarer.dart:131:19)
<asynchronous suspension>
#17 Invoker.waitForOutstandingCallbacks.<anonymous closure>.<anonymous closure> (package:test/src/backend/invoker.dart:200:17)
<asynchronous suspension>
#22 Invoker.waitForOutstandingCallbacks.<anonymous closure> (package:test/src/backend/invoker.dart:197:7)
#26 Invoker.waitForOutstandingCallbacks (package:test/src/backend/invoker.dart:196:5)
#27 Declarer.test.<anonymous closure> (package:test/src/backend/declarer.dart:129:29)
<asynchronous suspension>
#28 Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test/src/backend/invoker.dart:322:23)
<asynchronous suspension>
#43 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:385)
#44 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:414)
#45 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
(elided 31 frames from class _AssertionError, class _FakeAsync, package dart:async, package
dart:async-patch, and package stack_trace)
这是损坏的测试的样子:
testWidgets('Tapping item saves its id', (WidgetTester tester) async {
await launchApp(item, tester);
await tester.tap(find.byConfig(item));
expect(sameId(global_state.currentId, item.id), isTrue);
});
有没有办法在处理小部件树之前引入延迟?我还有哪些其他选择?还是我对问题的根本原因有误?