繁体   English   中英

flutter中Firestore数据变化结果为null

[英]Firestore data change results is null in flutter

集合名称是 userInfo & 我要更新的数据是名称。 但是当我使用文本字段 onChanged 值执行此操作时,更新方法会将集合文档中的值更改为 null 值。

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:hindusofindia/model/user.dart';
import 'package:hindusofindia/screens/user/UserProfile.dart';

class EditName extends StatefulWidget {
  EditName({this.email});

  final String email;

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

class _EditNameState extends State<EditName> {
  void _changeName(String value) async {
    Firestore.instance
        .collection("userInfo")
        .document(widget.email)
        .updateData({"name": value});
  }

  @override
  Widget build(BuildContext context) {
    String nameChange='6767';

    return Scaffold(
      appBar: AppBar(
        title: Text('Edit Name'),
        flexibleSpace: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(
              begin: Alignment.topLeft,
              end: Alignment.bottomRight,
              colors: <Color>[
                Colors.orange,
                Colors.red,
              ],
            ),
          ),
        ),
      ),
      body: Column(
        children: <Widget>[
          TextField(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              labelText: 'Edit Name',
            ),
            onChanged: (text) {
              setState(() {
                nameChange = text;
              });
            },
          ),
          FlatButton(
            onPressed: () {
              if (nameChange != '6767') {
                _changeName(nameChange);
              }
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => UserScreen(
                    currentUser: User(email: widget.email),
                  ),
                ),
              );
            },
            child: Text('Apply changes'),
          )
        ],
      ),
    );
  }
}

但应该发生的是文本字段名称更改导致将 firebase 文档集合中的名称值更新为文本字段值。 稍后按下 flatbutton 后会发生变化。

onChanged: (text) {
  setState(() {
    nameChange = text;
});

setState()将再次调用build()方法来重建小部件树,但是由于您在build()方法中声明了nameChange ,因此在单击FlatButton时它将具有相同的初始值。 你应该在class下声明为一个实例变量:

class _EditNameState extends State<EditName> {
String nameChange = "6767";
//...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM