3

我正在尝试对 a 内的小部件进行单元测试,FutureBuilder但我无法弄清楚。

我有一个FutureBuilder带有构建器的小部件,该构建器CameraPreview在连接状态完成时返回一个小部件:

    body: FutureBuilder<void>(
      future: _initializeControllerFuture,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          // If the Future is complete, display the preview.
          return CameraPreview(_controller);
        } else {
          // Otherwise, display a loading indicator.
          return const Center(child: CircularProgressIndicator());
        }
      },
    ),

以下是我创造未来的方式:

  Future<void> _initializeControllerFuture;

  @override
  void initState() {
    super.initState();
    // To display the current output from the Camera,
    // create a CameraController.
    _controller = CameraController(
      // Get a specific camera from the list of available cameras.
      widget.camera,
      // Define the resolution to use.
      ResolutionPreset.medium,
    );

    // Next, initialize the controller. This returns a Future.
    _initializeControllerFuture = _controller.initialize();
  }

这是我的测试:

testWidgets('Camera preview is available',
    (WidgetTester tester) async {
  await _buildCameraScreenPage(tester);
  await tester.pump();

  expect(find.byType(CameraPreview), findsOneWidget,
      reason: 'Camera preview should be visible.');
});

我已经对其进行了调试,但snapshot.connectionState从未完成(总是在等待),因此它跳过了返回 a 的行CameraPreview。我也试过tester.pumpAndSettle()了,但是超时了。

有任何想法吗?

4

0 回答 0