Flutter 未在UI上选中颤振数据表复选框

Flutter 未在UI上选中颤振数据表复选框,flutter,dart,google-cloud-firestore,Flutter,Dart,Google Cloud Firestore,目前,我正在学习使用flatter+Firebase进行应用程序开发 其中,云Firestore带来的数据反映在数据表中, 如果您检查数据表的复选框的日志,则点击所选时,它将变为True 我正在响应,但在检查用户界面上的复选框时遇到问题 因此,如果选择并按下删除按钮,相应的数据将被删除 但是,由于未检查UI,因此它处于不知道是否已选中的状态 如果有人知道如何解决这个问题,如果你能回答这个问题,那将是很有帮助的 口臭的例子: 插件版本: 云存储:^0.13.7 下面实现的代码 import'da

目前,我正在学习使用flatter+Firebase进行应用程序开发

其中,云Firestore带来的数据反映在数据表中, 如果您检查数据表的
复选框
的日志,则点击
所选
时,它将变为
True

我正在响应,但在检查用户界面上的
复选框时遇到问题

因此,如果选择并按下删除按钮,相应的数据将被删除

但是,由于未检查UI,因此它处于不知道是否已选中的状态

如果有人知道如何解决这个问题,如果你能回答这个问题,那将是很有帮助的

口臭的例子:

插件版本: 云存储:^0.13.7

下面实现的代码

import'dart:math';
import'package:card_manager/add_deck_page.dart';
import'package:card_manager/add_record_page.dart';
import'package:card_manager/card_page.dart';
import'package:card_manager/main.dart';
import'package:card_manager/page_manager.dart';
import'package:cloud_firestore/cloud_firestore.dart';
import'package:flutter/cupertino.dart';
import'package:flutter/material.dart';
import'package:firebase_auth/firebase_auth.dart';
import'package:provider/provider.dart';

import'login_page.dart';

class RecordPage extends StatefulWidget {
  final String email;
  final String name;

  BattleRecordPage(this.name, this.email);

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

class _RecordPage extends State<RecordPage> {

  List<DocumentSnapshot> selectedRecords;


  List<DocumentSnapshot> documents;


  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    selectedRecords = [];

  }

  onSelectedRow(bool selected, DocumentSnapshot document) async {
    setState(() {
      if (selected) {
        selectedRecords.add(record);
      } else {
        selectedRecords.remove(document);
      }
    });
  }

  deleteSelected() async {
    setState(() {
      if (selectedRecords.isNotEmpty) {
        List<DocumentSnapshot> temp = [];
        temp.addAll(selectedRecords);
        for (DocumentSnapshot record in temp) {
          Firestore.instance
              .collection("Records")
              .document(record.documentId)
              .delete();
          selectedRecords.remove(record);
        }
      }
    });
  }
  Widget recordData(documents) =>
      DataTable(
          showCheckboxColumn: true,
          columns: const <DataColumn>[
            DataColumn(
                label: Text(
                  "email",
                  style: TextStyle(fontStyle: FontStyle.italic),
                ),
                numeric: false),
            DataColumn(
                label: Text(
                  "name",
                  style: TextStyle(fontStyle: FontStyle.italic),
                ),
                numeric: false),
    
          ],
          rows: documents
              .map<DataRow>((document) =>
              DataRow(
                  selected: selectedRecords.contains(document),
                  onSelectChanged: (b) {
                      onSelectedRow(b, document);
                  },
                  cells: <DataCell>[
                        DataCell(Text(document["email"]),
                            showEditIcon: false, placeholder: true),
                        DataCell(Text(document["name"]),
                            showEditIcon: false, placeholder: false),
                  ]))
              .toList());


  @override
  Widget build(BuildContext context) {
    // user information
    final UserState userState = Provider.of<UserState>(context);

    final FirebaseUser user = userState.user;
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text("Record"),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.add),
            onPressed: () async {
              Navigator.pushNamed(context, AddRecord.routeName,
                  arguments: AddRecord(widget.email, widget.name));
            },
          ),
          IconButton(
            icon: Icon(Icons.delete),
            onPressed: () async {
              await deleteSelected();
            },
          )
        ],
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            // Create a widget based on the result of asynchronous processing
            child: StreamBuilder<QuerySnapshot>(
              // Asynchronous processing result → future
                stream: Firestore.instance
                    .collection("Records")
                    .where("uid", isEqualTo: user.uid)
                    .where("name", isEqualTo: widget.name)
                    .orderBy("date")
                    .snapshots(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    documents =
                        snapshot.data.documents;
                    return SingleChildScrollView(
                        scrollDirection: Axis.vertical,
                        child: FittedBox(child: recordData(documents)));
                  }
                  return Center(
                    child: Text("Loading..."),
                  );
                }),
          )
        ],
      ),
    );
  }
}

import'dart:math';
导入'package:card_manager/add_deck_page.dart';
导入'package:card_manager/add_record_page.dart';
导入'package:card_manager/card_page.dart';
导入'package:card_manager/main.dart';
导入'package:card_manager/page_manager.dart';
导入“包:cloud_firestore/cloud_firestore.dart”;
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“包:firebase_auth/firebase_auth.dart”;
导入'package:provider/provider.dart';
导入'login_page.dart';
类RecordPage扩展StatefulWidget{
最终字符串电子邮件;
最后的字符串名;
BattleRecordPage(this.name,this.email);
@凌驾
_RecordPage createState();
}
类_记录页扩展状态{
列出所选记录;
列出文件;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
selectedRecords=[];
}
onSelectedRow(bool selected,DocumentSnapshot document)异步{
设置状态(){
如果(选定){
选择记录。添加(记录);
}否则{
已选择的记录。删除(文档);
}
});
}
deleteSelected()异步{
设置状态(){
如果(selectedRecords.isNotEmpty){
列表温度=[];
临时添加全部(选定的记录);
用于(临时文件中的文档快照记录){
Firestore.instance
.收集(“记录”)
.document(记录.documentId)
.delete();
已选择的记录。删除(记录);
}
}
});
}
小部件记录数据(文档)=>
数据表(
showCheckboxColumn:true,
列:常量[
数据列(
标签:文本(
“电子邮件”,
样式:TextStyle(fontStyle:fontStyle.italic),
),
数字:false),
数据列(
标签:文本(
“姓名”,
样式:TextStyle(fontStyle:fontStyle.italic),
),
数字:false),
],
行:文档
.map((文档)=>
数据行(
已选:selectedRecords.contains(文档),
(b){
onSelectedRow(b,文件);
},
单元格:[
数据单元(文本(文档[“电子邮件]),
showEditIcon:false,占位符:true),
数据单元(文本(文档[“名称]),
showEditIcon:false,占位符:false),
]))
.toList());
@凌驾
小部件构建(构建上下文){
//用户信息
最终用户状态UserState=Provider.of(上下文);
最终FirebaseUser用户=userState.user;
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“记录”),
行动:[
图标按钮(
图标:图标(Icons.add),
onPressed:()异步{
Navigator.pushNamed(上下文,AddRecord.routeName,
参数:AddRecord(widget.email,widget.name));
},
),
图标按钮(
图标:图标(Icons.delete),
onPressed:()异步{
等待删除选定项();
},
)
],
),
正文:专栏(
儿童:[
扩大(
//根据异步处理的结果创建一个小部件
孩子:StreamBuilder(
//异步处理结果→ 未来
流:Firestore.instance
.收集(“记录”)
.where(“uid”,isEqualTo:user.uid)
.where(“name”,isEqualTo:widget.name)
.orderBy(“日期”)
.snapshots(),
生成器:(上下文,快照){
if(snapshot.hasData){
文件=
快照、数据、文档;
返回SingleChildScrollView(
滚动方向:轴垂直,
子项:FittedBox(子项:记录数据(文档));
}
返回中心(
子项:文本(“加载…”),
);
}),
)
],
),
);
}
}