如何将数据从流构建器显示到文本字段中并从listview更新?

问题描述

基本上,我想从列表视图更新数据。单击按钮编辑时,它将显示列表视图中的数据。这是我的照片。myhomesupervisor updateSupervisor。我已经使用了很多方法来显示,但仍然一无所获。

这是我的代码。

功能更新。

 // update data supervisor
    Future updateData(NewUser newUser) async {
    return supervisorCollection.document(newUser.id).updateData({
        'name': name,'email': email,'nophone': nophone,'uniqueID': uniqueID,});
    }

HomeSupervisor类

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:finalyearproject/model/NewUser.dart';
import 'package:flutter/material.dart';
import 'package:finalyearproject/screen/crud/UpdateSupervisor.dart';
import 'package:finalyearproject/screen/crud/AddSupervisor.dart';
import 'package:finalyearproject/sidebar/AdminDrawer.dart';
import 'package:provider/provider.dart';


NewUser user;

class HomeSupervisor extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.redAccent,title: Text('Supervisor'),actions: <Widget>[
          IconButton(
              icon: Icon(
                Icons.add,color: Colors.white,),onPressed: () {
                Navigator.push(context,MaterialPageRoute(builder: (context) => AddSupervisor()));
              })
        ],drawer: AdminDrawer(),body: ListSupervisor(),);
  }

}

class ListSupervisor extends StatefulWidget {
  @override
  _ListSupervisorState createState() => _ListSupervisorState();
}

class _ListSupervisorState extends State<ListSupervisor> {
  String email;
  String name;
  String nophone;
  String uniqueID;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: StreamBuilder(
          stream: Firestore.instance.collection('Supervisor').snapshots(),builder: (_,snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(
                child: Text("Loading..."),);
            } else {
              return ListView.builder(
                  itemCount: snapshot.data.documents.length,itemBuilder: (_,index) {
                    DocumentSnapshot sv = snapshot.data.documents[index];
                    return Card(
                      child: ListTile(
                          title: Container(
                            alignment: Alignment.centerLeft,child: Column(
                              children: <Widget>[
                                SizedBox(height: 5.0),Container(alignment: Alignment.centerLeft,child: Text(sv['name']),SizedBox(height: 5.0),child: Text(sv['email']),child: Text(sv['uniqueID']),)
                              ],trailing: Row(
                            mainAxisSize: MainAxisSize.min,children: <Widget>[
                              IconButton(
                                  icon: Icon(Icons.delete),color: Colors.red,onPressed: (){

                                  }
                              ),IconButton(
                                  icon: Icon(Icons.edit),color: Colors.black,onPressed: () {
                                    Navigator.push(context,MaterialPageRoute(builder: (context) => UpdateSupervisor()));
                                  }
                              ),IconButton(
                                  icon: Icon(Icons.share),onPressed: () {

                                  }
                              ),],)
                      ),);
                  });
            }
          }),);
  }
}

UpdateSupervisor类

import 'package:finalyearproject/model/NewUser.dart';
import 'package:finalyearproject/service/database.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';




class UpdateSupervisor extends StatefulWidget {
  final String name;
  final String email;
  final String uniqueID;
  final String phone;
  UpdateSupervisor({this.name,this.email,this.phone,this.uniqueID});

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

class _UpdateSupervisorState extends State<UpdateSupervisor> {

  TextEditingController _name =  new TextEditingController();
  TextEditingController _email =  new TextEditingController();
  TextEditingController _nophone =  new TextEditingController();
  TextEditingController _uniqueID =  new TextEditingController();
  // form values
  String name;
  String email;
  String uniqueID;
  String phone;


  final GlobalKey<FormState> _formKey = GlobalKey();

  @override
  Widget build(BuildContext context) {

    return Scaffold(
        appBar: AppBar(
          title: Text('Edit Supervisor'),backgroundColor: Colors.redAccent,body: Form(
                key: _formKey,child: SingleChildScrollView(
                  padding: const EdgeInsets.all(16.0),child: Column(
                    crossAxisAlignment: CrossAxisAlignment.end,children: <Widget>[
                      SizedBox(height: 25.0),TextFormField(
                        decoration: InputDecoration(
                            hintText: 'Name',border: OutlineInputBorder(borderRadius: BorderRadius.circular(5))),keyboardType: TextInputType.text,controller: _name,validator: (value) => value.isEmpty ? 'Name cannot be empty!': null,onChanged: (value) {
                          setState(() => name = value);
                        },SizedBox(height: 10.0),TextFormField(
                        decoration: InputDecoration(
                            hintText: 'Email',keyboardType: TextInputType.emailAddress,controller: _email,validator: (value) => value.isEmpty ? 'Email cannot be empty!': null,onChanged: (value) {
                          setState(() => email = value);
                        },TextFormField(
                        decoration: InputDecoration(
                            hintText: 'Number Phone',keyboardType: TextInputType.number,controller: _nophone,validator: (value) => value.isEmpty ? 'Number Phone cannot be empty!': null,onChanged: (value) {
                          setState(() => phone = value);
                        },TextFormField(
                        decoration: InputDecoration(
                            hintText: 'Unique ID ',controller: _uniqueID,validator: (value) => value.isEmpty ? 'Ic number cannot be empty!': null,onChanged: (value) {
                          setState(() => uniqueID = value);
                        },const SizedBox(height: 20.0),RaisedButton(
                          color: Colors.redAccent,textColor: Colors.black,child: Text("Update"),onPressed: () async {
                            if(_formKey.currentState.validate()){
                              DatabaseService().updateData(NewUser(name: name,email: email,nophone: phone,uniqueID: uniqueID));
                              _formKey.currentState.save();
                            }
                          }
                      ),)
              );

  }
}

我已经使用StreamBuilder将列表视图中的数据显示到文本字段中,但是仍然没有任何结果。而且也使用提供程序,但是过程太慢,因为我的案例涉及许多小部件。然后,现在我想尝试简单的方法,但仍然一无所获。有人可以帮助我或给我任何解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)