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方法中