Firebase 错误:没有名为';合并';
我刚开始学习Flitter,并尝试将一个简单的Todo应用程序连接到Firestore。为此,我想使用setOption“merge”,这样以前的列表就不会被删除。但是,每次尝试调试时,我都会收到错误“没有名为“merge”的命名参数”。以下是合并的代码:Firebase 错误:没有名为';合并';,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我刚开始学习Flitter,并尝试将一个简单的Todo应用程序连接到Firestore。为此,我想使用setOption“merge”,这样以前的列表就不会被删除。但是,每次尝试调试时,我都会收到错误“没有名为“merge”的命名参数”。以下是合并的代码: import 'package:cloud_firestore/cloud_firestore.dart'; class DatabaseService { final String userID; DatabaseService(
import 'package:cloud_firestore/cloud_firestore.dart';
class DatabaseService {
final String userID;
DatabaseService(this.userID);
final CollectionReference userToDos =
FirebaseFirestore.instance.collection('userToDos');
Future setTodo(String key, bool value) async {
return await userToDos.doc(userID).set({key: value}, merge: true);
}
Future deleteTodo(String key) async {
return await userToDos.doc(userID).update({
key: FieldValue.delete(),
});
}
下面是代码的其余部分:
import 'package:flutter/material.dart';
import 'add_item_dialog.dart';
import 'to_do_item.dart';
import 'database.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() => runApp(MaterialApp(home: ToDo()));
class ToDo extends StatefulWidget {
@override
_ToDoState createState() => _ToDoState();
}
class _ToDoState extends State<ToDo> {
User user;
DatabaseService database;
void addItem(String key) {
database.setTodo(key, false);
Navigator.pop(context);
}
void deleteItem(String key) {
database.deleteTodo(key);
}
void toggleDone(String key, bool value) {
database.setTodo(key, !value);
}
void newEntry() {
showDialog<AlertDialog>(
context: context,
builder: (BuildContext context) {
return AddItemDialog(addItem);
});
}
Future<void> connectToFirebase() async {
final FirebaseAuth authenticate = FirebaseAuth.instance;
UserCredential result = await authenticate.signInAnonymously();
user = result.user;
// get [DatabaseService] instance for current user
database = DatabaseService(user.uid);
if (!(await database.checkIfUserExists())) {
database.setTodo('Todo anlegen', false);
}
Stream userDocumentStream = database.getTodos();
userDocumentStream
.listen((documentSnapshot) => print(documentSnapshot.data));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('To-Do-App'),
backgroundColor: Color.fromRGBO(35, 152, 185, 100),
),
body: FutureBuilder(
// Wait until [connectToFirebase] returns stream
future: connectToFirebase(),
builder: (BuildContext context, AsyncSnapshot<void> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else {
// When stream exists, use Streambilder to wait for data
return StreamBuilder<DocumentSnapshot>(
stream: database.getTodos(),
builder: (BuildContext context,
AsyncSnapshot<DocumentSnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {
// resolve stream... Stream<DocumentSnapshot> -> DocumentSnapshot -> Map<String, bool>
Map<String, dynamic> items = snapshot.data.data;
return ListView.builder(
itemCount: items.length,
itemBuilder: (context, i) {
String key = items.keys.elementAt(i);
return ToDoItem(
key,
items[key],
() => deleteItem(key),
() => toggleDone(key, items[key]),
);
});
}
},
);
}
}),
floatingActionButton: FloatingActionButton(
onPressed: newEntry,
child: Icon(Icons.add),
backgroundColor: Color.fromRGBO(35, 152, 185, 100),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入'add_item_dialog.dart';
导入“to_do_item.dart”;
导入“database.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
void main()=>runApp(MaterialApp(home:ToDo());
类ToDo扩展StatefulWidget{
@凌驾
_ToDoState createState()=>\u ToDoState();
}
类_tostate扩展状态{
用户;
数据库服务数据库;
无效附加项(字符串键){
setTodo(key,false);
Navigator.pop(上下文);
}
void deleteItem(字符串键){
deleteTodo(键);
}
void toggleDone(字符串键,布尔值){
数据库.setTodo(键,!值);
}
void newEntry(){
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回AddItemDialog(addItem);
});
}
未来的connectToFirebase()异步{
final FirebaseAuth authenticate=FirebaseAuth.instance;
UserCredential结果=等待身份验证。signinanoymously();
user=result.user;
//获取当前用户的[DatabaseService]实例
数据库=数据库服务(user.uid);
if(!(wait database.checkIfUserExists())){
setTodo('Todo anlegen',false);
}
Stream userDocumentStream=database.getTodos();
用户文档流
.listen((documentSnapshot)=>打印(documentSnapshot.data));
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本('To-Do-App'),
背景颜色:颜色。来自RGBO(35152185100),
),
正文:未来建设者(
//等待[connectToFirebase]返回流
未来:connectToFirebase(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.connectionState==connectionState.waiting){
返回中心(子项:CircularProgressIndicator());
}否则{
//当流存在时,使用Streambilder等待数据
返回流生成器(
流:database.getTodos(),
生成器:(BuildContext上下文,
异步快照(快照){
如果(!snapshot.hasData){
返回中心(子项:CircularProgressIndicator());
}否则{
//解析流…流->文档快照->映射
映射项=snapshot.data.data;
返回ListView.builder(
itemCount:items.length,
itemBuilder:(上下文,i){
字符串键=items.keys.elementAt(i);
返回DoItem(
钥匙
项目[关键],
()=>deleteItem(键),
()=>切换完成(键,项[key]),
);
});
}
},
);
}
}),
浮动操作按钮:浮动操作按钮(
onPressed:newEntry,
子:图标(Icons.add),
背景颜色:颜色。来自RGBO(35152185100),
),
);
}
}
依赖项:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
# Social sharing buttons
share: '>=0.6.5 <2.0.0'
# Google Firestore packages
cloud_firestore: ^0.14.0+2
firebase_auth: ^0.18.0+1
颤振:
sdk:颤振
#下面将Cupertino图标字体添加到应用程序中。
#与CupertinoIcons类一起用于iOS风格的图标。
cupertino_图标:^0.1.3
#社交分享按钮
共享:'>=0.6.5我对firestore了解不多,但查看您需要使用SetOption
类进行合并:
Future setTodo(字符串键,布尔值)异步{
返回wait-userToDos.doc(userID.set({key:value},SetOptions(merge:true));
}