当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)
这是显示问题的视频:
嗯,据我所知,这种灰色叠加是材料设计库中所谓的“波纹效果”。看来 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。
| 归档时间: |
|
| 查看次数: |
2874 次 |
| 最近记录: |