- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 flutter 中,我试图让 DataTable 的列之一成为 DropdownButton,用户可以从 DropdownButton 中进行选择,它会更改该单元格的值(而不是任何其他单元格,所以不要更改值第一列)。
参见下面的示例代码(DropdownButton 不会更改单元格值),也在 DartPad 中.
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DataTableDemo(),
);
}
}
class User {
String firstName;
String lastName;
User({this.firstName, this.lastName});
static List<User> getUsers() {
return <User>[
User(firstName: "Paul", lastName: "Rudd"),
User(firstName: "Owen", lastName: "Wilson"),
User(firstName: "Jonah", lastName: "Hill"),
];
}
}
class DataTableDemo extends StatefulWidget {
DataTableDemo() : super();
final String title = "Data Table Flutter Demo";
@override
DataTableDemoState createState() => DataTableDemoState();
}
class DataTableDemoState extends State<DataTableDemo> {
List<User> users;
@override
void initState() {
users = User.getUsers();
super.initState();
}
List<String> lastNamesList = <String>[
'Rudd',
'Wilson',
'Hill',
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DropdownButton in DataTable'),
),
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: DataTable(
columns: [
DataColumn(
label: Text("FIRST NAME"),
numeric: false,
tooltip: "This is First Name",
),
DataColumn(
label: Text("LAST NAME"),
numeric: false,
tooltip: "This is Last Name",
),
],
rows: users
.map(
(user) => DataRow(cells: [
DataCell(
Text(user.firstName),
onTap: () {
print('Selected firstName: ${user.firstName}');
},
),
DataCell(DropdownButton<String>(
value: user.lastName,
onChanged: (String newValue) {
setState(() {
//help!
});
},
items: lastNamesList
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
))
]),
)
.toList(),
),
));
}
}
最佳答案
您可以在下面复制粘贴运行完整代码
第 1 步:您可以使用 List
selectedUser
来记录每个选择
第 2 步:使用 selectedUser.asMap().entries.map
获取 index
代码片段
List<User> selectedUser;
...
rows: selectedUser.asMap().entries.map((user) {
int idx = user.key;
print(idx);
return DataRow(cells: [
DataCell(
Text(selectedUser[idx].firstName),
onTap: () {
print('Selected firstName: ${selectedUser[idx].firstName}');
},
),
DataCell(DropdownButton<User>(
value: selectedUser[idx],
onChanged: (User newUser) {
setState(() {
selectedUser[idx] = newUser;
});
},
items: users.map<DropdownMenuItem<User>>((User value) {
return DropdownMenuItem<User>(
value: value,
child: Text(value.lastName),
);
}).toList(),
))
]);
}).toList(),
工作演示
完整代码
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DataTableDemo(),
);
}
}
class User {
String firstName;
String lastName;
User({this.firstName, this.lastName});
static List<User> getUsers() {
return <User>[
User(firstName: "Paul", lastName: "Rudd"),
User(firstName: "Owen", lastName: "Wilson"),
User(firstName: "Jonah", lastName: "Hill"),
];
}
}
class DataTableDemo extends StatefulWidget {
DataTableDemo() : super();
final String title = "Data Table Flutter Demo";
@override
DataTableDemoState createState() => DataTableDemoState();
}
class DataTableDemoState extends State<DataTableDemo> {
List<User> users;
List<User> selectedUser;
@override
void initState() {
users = User.getUsers();
selectedUser = List.from(users);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DropdownButton in DataTable'),
),
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: DataTable(
columns: [
DataColumn(
label: Text("FIRST NAME"),
numeric: false,
tooltip: "This is First Name",
),
DataColumn(
label: Text("LAST NAME"),
numeric: false,
tooltip: "This is Last Name",
),
],
rows: selectedUser.asMap().entries.map((user) {
int idx = user.key;
print(idx);
return DataRow(cells: [
DataCell(
Text(selectedUser[idx].firstName),
onTap: () {
print('Selected firstName: ${selectedUser[idx].firstName}');
},
),
DataCell(DropdownButton<User>(
value: selectedUser[idx],
onChanged: (User newUser) {
setState(() {
selectedUser[idx] = newUser;
});
},
items: users.map<DropdownMenuItem<User>>((User value) {
return DropdownMenuItem<User>(
value: value,
child: Text(value.lastName),
);
}).toList(),
))
]);
}).toList(),
),
));
}
}
完整代码2,第一列值不变
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DataTableDemo(),
);
}
}
class User {
String firstName;
String lastName;
User({this.firstName, this.lastName});
static List<User> getUsers() {
return <User>[
User(firstName: "Paul", lastName: "Rudd"),
User(firstName: "Owen", lastName: "Wilson"),
User(firstName: "Jonah", lastName: "Hill"),
];
}
}
class DataTableDemo extends StatefulWidget {
DataTableDemo() : super();
final String title = "Data Table Flutter Demo";
@override
DataTableDemoState createState() => DataTableDemoState();
}
class DataTableDemoState extends State<DataTableDemo> {
List<User> users;
List<User> selectedUser;
@override
void initState() {
users = User.getUsers();
selectedUser = List.from(users);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DropdownButton in DataTable'),
),
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: DataTable(
columns: [
DataColumn(
label: Text("FIRST NAME"),
numeric: false,
tooltip: "This is First Name",
),
DataColumn(
label: Text("LAST NAME"),
numeric: false,
tooltip: "This is Last Name",
),
],
rows: users.asMap().entries.map((user) {
int idx = user.key;
print(idx);
return DataRow(cells: [
/*DataCell(
Text(selectedUser[idx].firstName),
onTap: () {
print('Selected firstName: ${selectedUser[idx].firstName}');
},
),*/
DataCell(
Text(user.value.firstName),
onTap: () {
print('Selected firstName: ${user.value.firstName}');
},
),
DataCell(DropdownButton<User>(
value: selectedUser[idx],
onChanged: (User newUser) {
setState(() {
selectedUser[idx] = newUser;
});
},
items: users.map<DropdownMenuItem<User>>((User value) {
return DropdownMenuItem<User>(
value: value,
child: Text(value.lastName),
);
}).toList(),
))
]);
}).toList(),
),
));
}
}
关于DataTable 中的 Flutter DropdownButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64314144/
我尝试在 C# 窗口形式的 statusStrip 中创建几个 DropDownButton。这是正常的,当我将光标移动到按钮上时,它不会下拉项目,只有当我点击 DropDownButton 时它才会
希望你一切都好。我有一个小问题,我想根据另一个 DropdownButton 的值动态更改 DropdownButton 的值。 好吧,我会解释我的位置和问题所在: 首先,我有一个包含 3 个元素的
希望你一切都好。我有一个小问题,我想根据另一个 DropdownButton 的值动态更改 DropdownButton 的值。 好吧,我会解释我的位置和问题所在: 首先,我有一个包含 3 个元素的
我正在尝试实现 DropdownButton可以用标题将特定项目彼此分开(请参阅下图中的所需输出,标题为绿色) 就像在示例中一样,我想将这些绿色标题添加到我现有的 DropdownButton 中。
我将一个 DropdownButton 放在 TileList 的尾部,设置文档中显示的参数以使其处于事件状态,但无论如何它都保持禁用状态。 ListTile 是 ListView 的一部分,未包含在
我想在一行中添加一个下拉列表。 当我这样做的时候 Row( children: [ Expanded(child:TextField(
我创建了一个 dropdownButton 以允许用户从下拉列表中进行选择,该列表将通过 API 填充。现在我正在使用我创建的列表进行填充。 目前该按钮正在显示我的列表中的项目,但在做出选择后,列表不
我尝试像这样选择 DropdownButton 项: import 'package:flutter/material.dart'; import 'package:flutter_test/flut
我正在编写 Flutter Web 应用程序,并将一些小部件测试添加到我的代码库中。我很难让 flutter_test 按预期工作。我当前面临的问题是尝试在 DropdownButton 中选择一个值
例如,在 TextField 中,可以设置带有标签文本的 InputDecoration,当没有用户输入时显示在 TextField 的中心,然后显示在用户输入文本的上方。 使用 DropDownBu
在困惑中,我试图让DataTable的列之一成为DropdownButton。我希望最初从getUsers填充DataTable行,然后能够使用基于ratingList的DropdownButton编
在 flutter 中,我试图让 DataTable 的列之一成为 DropdownButton,用户可以从 DropdownButton 中进行选择,它会更改该单元格的值(而不是任何其他单元格,所以
我正在创建一个下拉列表,但是每当我单击一个值并尝试在onChanged部分中打印该值时,它都会输出null,这是我做错了什么?谢谢。这是我的代码: List _fonts = [ User
可以使用下拉按钮: return DropdownButton( items: ['Foo', 'Bar'].map((String value) { r
总结 我有一个 DropDownButton包含特定国家的所有联赛。所以本质上用户选择了 Nation来自ComboBox和 Leagues所选 Nation将添加到DropDownButton里面.
我在使用 DropdownButton 时遇到问题,我不知道为什么悬停效果比下拉菜单的实际大小长。我的 DropdownButton 位于 Telerik 网格内,这可能会导致问题。为了简单起见,我将
我想改变下拉按钮的颜色,让它看起来像“btn btn-primary”。但它也会改变所有菜单项的颜色,并将它们向右移动。这是原始下拉菜单的样子: 然后我设计成这样:
根据 this page ,DropDownButton 使用 ContextMenu 来显示 ItemsSource。我们如何知道用户点击了什么?按钮上的 Click 事件不是针对菜单的,而是针对按
我能够将提供给 DropDownButton 的 DropdownMenuItem 中使用的文本项居中,但是当菜单关闭时,如何才能将所选项目居中? 最佳答案 像这样: Dropdo
我在 appBar 和脚手架主体中创建了两个 DropdownButton。只要选择顶部 DropdownButton 就会更改语言。在我从第二个 Dropdown Button 中选择 One Co
我是一名优秀的程序员,十分优秀!