突出显示 DropdownButton 中的选定值(如 PopupMenuButton)

Sim*_*ler 7 flutter

PopupMenuButton按下 a 时,当前选定的值会突出显示,在此处输入图片说明

但是当DropdownButton按下a 时,当前选定的值不会突出显示。 在此处输入图片说明

有没有办法突出显示 a 的选定值DropdownButton

这里有一些示例代码供参考:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MyHomePage());
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String letter = 'A';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Popup Menu Button')),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          SizedBox(height: 16.0),
          Text('PopupMenuButton'),
          buildPopupMenuButton(),
          SizedBox(height: 16.0),
          Text('DropdownButton'),
          buildDropdownButton(),
        ],
      ),
    );
  }

  Widget buildPopupMenuButton() {
    return PopupMenuButton<String>(
      padding: EdgeInsets.zero,
      initialValue: letter,
      onSelected: (val) => setState(() => letter = val),
      child: ListTile(
        title: Text('The letter $letter'),
      ),
      itemBuilder: (BuildContext context) {
        return <PopupMenuItem<String>>[
          PopupMenuItem<String>(
            value: 'A',
            child: Text('The letter A'),
          ),
          PopupMenuItem<String>(
            value: 'B',
            child: Text('The letter B'),
          ),
        ];
      },
    );
  }

  Widget buildDropdownButton() {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 16.0),
      child: DropdownButton<String>(
        value: letter,
        onChanged: (val) => setState(() => letter = val),
        items: [
          DropdownMenuItem<String>(
            value: 'A',
            child: Text('The letter A'),
          ),
          DropdownMenuItem<String>(
            value: 'B',
            child: Text('The letter B'),
          ),
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

这是显示问题的视频:

在此处输入图片说明

Gio*_*gen 0

嗯,据我所知,这种灰色叠加是材料设计库中所谓的“波纹效果”。看来 Flutter 还没有适应所有 widget 的完整设计。

但是,您可以尝试使用InkWell小部件将这种动画/颜色添加到当前小部件:

https://flutter.io/docs/cookbook/gestures/ripples

例如:

PopupMenuItem<String>(
    value: 'B',
    child: InkWell(child: Text('The letter B'))
),
Run Code Online (Sandbox Code Playgroud)

我不确定宽度是否正确,但至少当您按下条目时它应该显示灰色叠加层。

您还可以检查Flutter源: https://github.com/flutter/flutter/blob/237fc2fb45639312001e947bf7465ef9f23bb699/packages/flutter/lib/src/material/popup_menu.dart#L933

在这里您可以看到 aInkwell是用于 的标准PopupMenuButton

  • 感谢您的反馈,但我对按下按钮时的 InkWell 效果不感兴趣。当显示所有值时,我对当前所选值的较暗背景感兴趣。 (2认同)