Checkbox 颤振警报对话框数据表复选框
我在警报对话框中有一个带有复选框的数据表,当我单击该复选框时,它没有选中(选中=选中)该框。我跟着这个 这是我的试用版Checkbox 颤振警报对话框数据表复选框,checkbox,flutter,datatable,android-alertdialog,Checkbox,Flutter,Datatable,Android Alertdialog,我在警报对话框中有一个带有复选框的数据表,当我单击该复选框时,它没有选中(选中=选中)该框。我跟着这个 这是我的试用版 import 'package:flutter/material.dart'; void main(){ runApp(new MaterialApp( debugShowCheckedModeBanner: false, home: new DataTableDemo(), theme: ThemeData.light(), )); } c
import 'package:flutter/material.dart';
void main(){
runApp(new MaterialApp(
debugShowCheckedModeBanner: false,
home: new DataTableDemo(),
theme: ThemeData.light(),
));
}
class DataTableDemo extends StatefulWidget {
final String title = "Data Table Flutter Demo";
@override
DataTableDemoState createState() => DataTableDemoState();
}
class DataTableDemoState extends State<DataTableDemo> {
List<User> users;
List<User> selectedUsers;
bool sort;
@override
void initState() {
sort = false;
selectedUsers = [];
users = User.getUsers();
super.initState();
}
onSortColum(int columnIndex, bool ascending) {
if (columnIndex == 0) {
if (ascending) {
users.sort((a, b) => a.firstName.compareTo(b.firstName));
} else {
users.sort((a, b) => b.firstName.compareTo(a.firstName));
}
}
}
onSelectedRow(bool selected, User user) async {
setState(() {
if (selected) {
selectedUsers.add(user);
} else {
selectedUsers.remove(user);
}
});
}
deleteSelected() async {
setState(() {
if (selectedUsers.isNotEmpty) {
List<User> temp = [];
temp.addAll(selectedUsers);
for (User user in temp) {
users.remove(user);
selectedUsers.remove(user);
}
}
});
}
SingleChildScrollView dataBody() {
return SingleChildScrollView(
scrollDirection: Axis.vertical,
child: DataTable(
sortAscending: sort,
sortColumnIndex: 0,
columns: [
DataColumn(
label: Text("FIRST NAME"),
numeric: false,
tooltip: "This is First Name",
onSort: (columnIndex, ascending) {
setState(() {
sort = !sort;
});
onSortColum(columnIndex, ascending);
}),
DataColumn(
label: Text("LAST NAME"),
numeric: false,
tooltip: "This is Last Name",
),
],
rows: users
.map(
(user) => DataRow(
selected: selectedUsers.contains(user),
onSelectChanged: (b) {
print("Onselect");
onSelectedRow(b, user);
},
cells: [
DataCell(
Text(user.firstName),
onTap: () {
print('Selected ${user.firstName}');
},
),
DataCell(
Text(user.lastName),
),
]),
)
.toList(),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
onPressed: (){
showDialog(
context: context,
builder: (_) => new AlertDialog(
title: new Text('Data Table Flutter'),
content: new Container(
height: 500,
width: 400,
child: new SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: new Column(
children: <Widget>[
dataBody()
],
),
)
),
actions: <Widget>[
new OutlineButton(
child: Text('SELECTED ${selectedUsers.length}'),
onPressed: () {},
),
new OutlineButton(
child: Text('DELETE SELECTED'),
onPressed: selectedUsers.isEmpty
? null
: () {
deleteSelected();
},
),
],
)
);
},
),
);
}
}
class User {
String firstName;
String lastName;
User({this.firstName, this.lastName});
static List<User> getUsers() {
return <User>[
User(firstName: "Aaryan", lastName: "Shah"),
User(firstName: "Ben", lastName: "John"),
User(firstName: "Carrie", lastName: "Brown"),
User(firstName: "Deep", lastName: "Sen"),
User(firstName: "Emily", lastName: "Jane"),
];
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(新材料)PP(
debugShowCheckedModeBanner:false,
主页:新DataTableDemo(),
主题:ThemeData.light(),
));
}
类DataTableDemo扩展了StatefulWidget{
最终字符串title=“数据表颤振演示”;
@凌驾
DataTableDemoState createState()=>DataTableDemoState();
}
类DataTableDemoState扩展了状态{
列出用户名单;
列出选定的用户;
布尔排序;
@凌驾
void initState(){
排序=假;
selectedUsers=[];
users=User.getUsers();
super.initState();
}
onSortColum(整数列索引,布尔升序){
如果(columnIndex==0){
if(升序){
排序((a,b)=>a.firstName.compareTo(b.firstName));
}否则{
排序((a,b)=>b.firstName.compareTo(a.firstName));
}
}
}
onSelectedRow(布尔选定,用户)异步{
设置状态(){
如果(选定){
选择用户。添加(用户);
}否则{
选择用户。删除(用户);
}
});
}
deleteSelected()异步{
设置状态(){
如果(selectedUsers.isNotEmpty){
列表温度=[];
临时添加所有(选定用户);
for(临时用户中的用户){
用户。删除(用户);
选择用户。删除(用户);
}
}
});
}
SingleChildScrollView数据体(){
返回SingleChildScrollView(
滚动方向:轴垂直,
子:数据表(
排序:排序,
sortColumnIndex:0,
栏目:[
数据列(
标签:文本(“名字”),
数字:false,
工具提示:“这是名字”,
onSort:(列索引,升序){
设置状态(){
排序=!排序;
});
onSortColum(列索引,升序);
}),
数据列(
标签:文本(“姓氏”),
数字:false,
工具提示:“这是姓氏”,
),
],
行:用户
.地图(
(用户)=>DataRow(
已选:selectedUsers.contains(用户),
(b){
打印(“Onselect”);
onSelectedRow(b,用户);
},
单元格:[
数据单元(
文本(user.firstName),
onTap:(){
打印('Selected${user.firstName}');
},
),
数据单元(
文本(user.lastName),
),
]),
)
.toList(),
),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
floatingActionButton:新的floatingActionButton(
子:新图标(Icons.add),
已按下:(){
显示对话框(
上下文:上下文,
生成器:()=>新建警报对话框(
标题:新文本(“数据表颤振”),
内容:新容器(
身高:500,
宽度:400,
子:新的SingleChildScrollView(
滚动方向:轴水平,
子:新列(
儿童:[
数据体()
],
),
)
),
行动:[
新大纲按钮(
子项:文本('SELECTED${selectedUsers.length}'),
按下:(){},
),
新大纲按钮(
子项:文本(“删除选定项”),
按下:selectedUsers.isEmpty
无效的
: () {
删除选定项();
},
),
],
)
);
},
),
);
}
}
类用户{
字符串名;
字符串lastName;
用户({this.firstName,this.lastName});
静态列表getUsers(){
返回[
用户(名:“Aaryan”,姓:“Shah”),
用户(姓:“本”,姓:“约翰”),
用户(名:“Carrie”,姓:“Brown”),
用户(姓:“深”,姓:“森”),
用户(名:“Emily”,姓:“Jane”),
];
}
}
请让我知道,有什么东西丢失了,或者有什么东西我需要改变。这将对我很有帮助。提前感谢。用于更新对话框的设置状态不适用于该对话框。它正在调用DataTableDemoState类的setState。如果要更新对话框,请使其成为另一个有状态小部件,然后在需要更新时调用其setState方法。大概是这样的:
......
content: new SingleChildScrollView(
child: new Material(
child: new MyDialogContent(list: countries),
),
),
);
},
其中MyDialogContent是一个有状态小部件,您可以在MyDialogContentState类中更新对话框内容。希望这能有所帮助谢谢你的回复@nick.tdr,我会尽力让你知道你是受欢迎的。如果这有帮助,请接受答案。你能帮我解决这个问题吗,我试过写作,但没有为我工作。请看这个是的,我看到了你的代码。如我所说,如果需要更新对话框状态,则需要调用dialog的setState方法。因此,将更改复选框状态的逻辑移到_MyDialogState类的setState方法中