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