簡體   English   中英

如何將 map 數據添加到 flutter 中的 Cloud firestore?

[英]how to add map data to cloud firestore in flutter?

我想將用戶名添加為包含“firstName”和“lastName”的 map。 我已經有了用戶 model 和名稱 model,這是代碼:

名稱_型號.dart

class Name {
  final String firstName;
  final String lastName;

  Name({
    required this.firstName,
    required this.lastName,
  });

  Map<String, dynamic> toMap() {
    return {
      'firstName': firstName,
      'lastName': lastName,
    };
  }

  Name.fromMap(Map<String, dynamic> nameMap)
      : firstName = nameMap['firstName'],
        lastName = nameMap['lastName'];
}

用戶模型.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:ukk_backup/models/name_model.dart';

class User {
  final String? docId;
  final String email;
  final String password;
  final String phoneNumber;
  final Name name;

  User({
    this.docId,
    required this.email,
    required this.password,
    required this.phoneNumber,
    required this.name,
  });

  Map<String, dynamic> toMap() => {
        'docId': docId,
        'email': email,
        'password': password,
        'phoneNumber': phoneNumber,
        'name': name.toMap(),
      };
  User.fromDocumentSnapshot(DocumentSnapshot<Map<String, dynamic>> doc)
      : docId = doc.id,
        email = doc['email'],
        password = doc['password'],
        phoneNumber = doc['phoneNumber'],
        name = Name.fromMap(doc['name']);
}

當我按下注冊按鈕時,我希望所有數據都保存在 Cloud firestore 中,包括類型為 map 的名稱。 這是onPressed

onPressed: (() async {
 if (_formKey.currentState!.validate()) {
   DatabaseService service = DatabaseService();
   User user = User(
     email: emailController.text,
     password: passwordController.text,
     phoneNumber: phoneNumberController.text,
     name: , //what to type?
   );
   setState(() {
     _isLoading = true;
   });
   await service.addUser(user);
   setState(() {
   _isLoading = false;
   });
  }
}),

如果您發現我的某些代碼不正確或者您找到了解決方案,請告訴我。 謝謝你。

編輯:

database_services.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:ukk_backup/models/user_model.dart';

class DatabaseService {
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;

  addUser(User userData) async {
    await _firestore.collection('users').add(userData.toMap());
  }

  updateUser(User userData) async {
    await _firestore
        .collection('users')
        .doc(userData.docId)
        .update(userData.toMap());
  }

  Future<void> deleteUser(String documentId) async {
    await _firestore.collection('users').doc(documentId).delete();
  }

  Future<List<User>> retrieveUser() async {
    QuerySnapshot<Map<String, dynamic>> snapshot =
        await _firestore.collection('users').get();
    return snapshot.docs
        .map((docSnapshot) => User.fromDocumentSnapshot(docSnapshot))
        .toList();
  }
}

我首先誤解了你的問題。 您的 DataBaseService class 在我看來沒問題。 因此,如果我是對的,您遇到的唯一問題是您不知道如何將名稱添加到 UserObject。 如果那是您問題的本質,那么這很容易:

onPressed: (() async {
 if (_formKey.currentState!.validate()) {
   DatabaseService service = DatabaseService();
   User user = User(
     email: emailController.text,
     password: passwordController.text,
     phoneNumber: phoneNumberController.text,
     name: Name(firstName: firstNameController.text, lastName: lastNameController.text),
   );
   setState(() {
     _isLoading = true;
   });
   await service.addUser(user);
   setState(() {
   _isLoading = false;
   });
  }
}),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM