You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter组件测试中如何选中DropdownButton选项并解决同键报错

问题成因

DropdownButton组件在渲染时,会生成两份完全相同的DropdownMenuItem实例:

  • 一份用于未打开下拉框时,作为选中结果展示在DropdownButton的按钮区域
  • 另一份会在你点击打开下拉菜单后,渲染在弹出的浮层列表中
    你给每个DropdownMenuItem绑定了固定Key,所以这两份实例会持有相同的Key,导致测试时find.byKey会同时匹配到两个组件,触发tap方法时就会抛出多组件匹配的异常。
解决方案

你只需要在查找下拉项时,指定匹配浮层内的最后一个实例即可,修改后的测试代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:dropdown_test_sample/main.dart';

void main() {
  testWidgets('Select Dropdown item test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(const SampleApp());

    final dropdown = find.byKey(const ValueKey('dropdown'));

    await tester.tap(dropdown);
    await tester.pumpAndSettle();

    // 取最后一个匹配的Key实例,对应弹出浮层内的可点击选项
    final dropdownItem = find.byKey(const ValueKey('First item key')).last;

    await tester.tap(dropdownItem);
    await tester.pumpAndSettle();

    // 可选:验证选中结果是否符合预期
    expect(find.text('First item'), findsOneWidget);
  });
}

如果你不想用Key查找,也可以通过文本内容匹配下拉选项,写法如下:

final dropdownItem = find.text('First item').last;

内容的提问来源于stack exchange,提问作者Joshua Erinosho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:36:03