Flutter 颤振将列表平铺导航到列表详细信息页面
有一个在屏幕上列出所有待办事项的待办事项应用程序 这是我的列表视图Flutter 颤振将列表平铺导航到列表详细信息页面,flutter,Flutter,有一个在屏幕上列出所有待办事项的待办事项应用程序 这是我的列表视图 class assignedTask extends StatefulWidget { static const String id = 'assignedTask'; @override _assignedTaskState createState() => _assignedTaskState(); } class _assignedTaskState ext
class assignedTask extends StatefulWidget {
static const String id = 'assignedTask';
@override
_assignedTaskState createState() => _assignedTaskState();
}
class _assignedTaskState extends State<assignedTask> {
String Title;
String Summary;
var tasks;
crudMedthods crudObj = new crudMedthods();
var documentID;
var documents;
Future<bool> addDialog(BuildContext context) async {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Add Data', style: TextStyle(fontSize: 15.0)),
content: Container(
height: 125.0,
width: 150.0,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(hintText: 'Enter Title'),
onChanged: (value) {
this.Title = value;
},
),
SizedBox(height: 5.0),
TextField(
decoration: InputDecoration(hintText: 'Enter Summary'),
onChanged: (value) {
this.Summary = value;
},
),
],
),
),
actions: <Widget>[
FlatButton(
child: Text('Add'),
textColor: Colors.blue,
onPressed: () {
Navigator.of(context).pop();
crudObj.addData({
'Title': this.Title,
'Summary': this.Summary
}).then((result) {
dialogTrigger(context);
}).catchError((e) {
print(e);
});
},
)
],
);
});
}
Future<bool> updateDialog(BuildContext context, selectedDoc) async {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Update Data', style: TextStyle(fontSize: 15.0)),
content: Container(
height: 125.0,
width: 150.0,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(hintText: 'Title'),
onChanged: (value) {
this.Title = value;
},
),
SizedBox(height: 5.0),
TextField(
decoration: InputDecoration(hintText: 'Enter Summary'),
onChanged: (value) {
this.Summary = value;
},
),
],
),
),
actions: <Widget>[
FlatButton(
child: Text('Update'),
textColor: Colors.blue,
onPressed: () {
Navigator.of(context).pop();
crudObj.updateData(selectedDoc, {
'Title': this.Title,
'Summary': this.Summary
}).then((result) {
// dialogTrigger(context);
}).catchError((e) {
print(e);
});
},
)
],
);
});
}
Future<bool> dialogTrigger(BuildContext context) async {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Job Done', style: TextStyle(fontSize: 15.0)),
content: Text('Added'),
actions: <Widget>[
FlatButton(
child: Text('Alright'),
textColor: Colors.blue,
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});
}
@override
void initState() {
crudObj.getData().then((results) {
setState(() {
tasks = results;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('Assigned Tasks'),
actions: <Widget>[
IconButton(
icon: Icon(Icons.add),
onPressed: () {
addDialog(context);
},
),
IconButton(
icon: Icon(Icons.refresh),
onPressed: () {
crudObj.getData().then((results) {
setState(() {
tasks = results;
});
});
},
)
],
),
body: _TaskList(),
);
}
Widget _TaskList() {
if (tasks != null) {
return StreamBuilder(
stream: tasks,
// ignore: missing_return
builder: (context, snapshot) {
if (snapshot.data != null) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
padding: EdgeInsets.all(7.0),
itemBuilder: (context, i) {
return ListTile(
title: Text(snapshot.data.documents[i].data["Title"]??""),
subtitle: Text(snapshot.data.documents[i].data["Summary"]??""),
/*onTap: () {
*//*
updateDialog(
context, snapshot.data.documents[i].documentID);
},*/
onTap: (){
Navigator.push(context,MaterialPageRoute(builder:(context)=>detailview(context,snapshot.data.douments[i].documentid)));
},
onLongPress: () {
crudObj.deleteData(snapshot.data.documents[i].documentID);
},
);
},
);
}
return CircularProgressIndicator();
},
);
} else {
return Text('Loading, Please wait..');
}
}
}
类分配任务扩展StatefulWidget{
静态常量字符串id='assignedTask';
@凌驾
_assignedTaskState createState()=>\u assignedTaskState();
}
类_assignedTaskState扩展状态{
字符串标题;
字符串摘要;
var任务;
crudMedthods crudObj=新的crudMedthods();
var-documentID;
风险值文件;
Future addDialog(BuildContext上下文)异步{
返回显示对话框(
上下文:上下文,
禁止:错误,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“添加数据”,样式:TextStyle(fontSize:15.0)),
内容:容器(
高度:125.0,
宽度:150.0,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本字段(
装饰:输入装饰(hintText:“输入标题”),
一旦更改:(值){
这个。标题=价值;
},
),
尺寸箱(高度:5.0),
文本字段(
装饰:输入装饰(hintText:“输入摘要”),
一旦更改:(值){
这个。总结=价值;
},
),
],
),
),
行动:[
扁平按钮(
子项:文本('Add'),
textColor:Colors.blue,
已按下:(){
Navigator.of(context.pop();
crudObj.addData({
“Title”:这个。Title,
“Summary”:此为。Summary
}).然后((结果){
对话触发(上下文);
}).catchError((e){
印刷品(e);
});
},
)
],
);
});
}
Future updateDialog(BuildContext上下文,selectedDoc)异步{
返回显示对话框(
上下文:上下文,
禁止:错误,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“更新数据”,样式:TextStyle(fontSize:15.0)),
内容:容器(
高度:125.0,
宽度:150.0,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本字段(
装饰:输入装饰(hintText:“标题”),
一旦更改:(值){
这个。标题=价值;
},
),
尺寸箱(高度:5.0),
文本字段(
装饰:输入装饰(hintText:“输入摘要”),
一旦更改:(值){
这个。总结=价值;
},
),
],
),
),
行动:[
扁平按钮(
子项:文本('Update'),
textColor:Colors.blue,
已按下:(){
Navigator.of(context.pop();
crudObj.updateData(已选择的Doc{
“Title”:这个。Title,
“Summary”:此为。Summary
}).然后((结果){
//对话触发(上下文);
}).catchError((e){
印刷品(e);
});
},
)
],
);
});
}
未来对话框触发器(BuildContext上下文)异步{
返回显示对话框(
上下文:上下文,
禁止:错误,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“完成工作”,样式:TextStyle(fontSize:15.0)),
内容:文本(“已添加”),
行动:[
扁平按钮(
孩子:文本(‘好’),
textColor:Colors.blue,
已按下:(){
Navigator.of(context.pop();
},
)
],
);
});
}
@凌驾
void initState(){
crudObj.getData().then((结果){
设置状态(){
任务=结果;
});
});
super.initState();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:appBar(
标题:文本(“分配的任务”),
行动:[
图标按钮(
图标:图标(Icons.add),
已按下:(){
添加对话框(上下文);
},
),
图标按钮(
图标:图标(Icons.refresh),
已按下:(){
crudObj.getData().then((结果){
设置状态(){
任务=结果;
});
});
},
)
],
),
正文:_TaskList(),
);
}
小部件_TaskList(){
如果(任务!=null){
返回流生成器(
流:任务,
//忽略:缺少返回
建设者:
class detailview extends StatefulWidget {
static const String id = 'detailview';
detailview(BuildContext context, selectedDoc);
@override
_detailviewState createState() => _detailviewState();
}
class _detailviewState extends State<detailview> {
final TaskReference = FirebaseDatabase.instance.reference().child('Task');
crudMedthods crudObj1 = new crudMedthods();
/*TextEditingController _titleController;
TextEditingController _descriptionController;*/
var tasks;
/*@override
void initState() {
super.initState();
//_titleController = new TextEditingController(text: widget.tasks.Title);
//_descriptionController = new TextEditingController(text: widget.tasks.Summary);
}*
*/
@override
void initState() {
crudObj1.getDetail(tasks).then((results) {
setState(() {
tasks = results;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('Details of Tasks'),
actions: <Widget>[
],
),
body: Column(
children: <Widget>[
TextField(
//controller: _titleController,
),
],
)
);
}
}
onTap: (){
Navigator.push(context,MaterialPageRoute(builder:(context)=>DetailPage(context,snapshot.data.douments[i])));
},
class DetailPage extends StatelessWidget {
DocumentSnapshot detailDocument;
DetailPage(this.detailDocument);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(detailDocument.data["Title"]),
),
body: Center(
child: Text(detailDocument.data["Summary"]),
),
);
}
}