Cloud Firestore是一个自动扩展的实时文档数据库,用于存储,同步和查询用于移动,Web和服务器开发的数据。
在数据层中,我通过从Firestore获取数据来实现用户介绍。我的目标是最大程度地减少烟台查询数量以提高性能并避免不必要的成本。
这是我的代码,如何使用我的componentDidmount()将数据= {data}的muidataTAttion推出。我已经可以从用户集合中获取数据,但是,我不知道A ...
class PendingOrders extends Component { constructor() { super(); this.state = { orders: [] }; } columns = [ "Order ID", { name: "Confirm", options: { filter: true, sort: false, empty: true, customBodyRender: ( value, tableMeta, ) => { return ( <FormControlLabel value={value} control={ <Button value={value} color="secondary" variant="primary"> confirm </Button> } onClick={(e) => { try { firestore.collection("orders").doc(tableMeta.rowData[0]).set( { orderStatus: "Confirmed", }, { merge: true } ); } catch (err) { console.log(err); } }} /> ); }, }, }, componentDidMount() { try { firestore .collection("orders") .where("orderStatus", "==", "Pending") .get() .then((snapshot) => { const orders = []; snapshot.docs.map((doc) => { const items = []; orders.push({ const items = []; doc.data().items.forEach((item) => { items.push(`${item.productName}(${item.qty}),`); }); const data = doc.data(); orders.push({ "Order ID": doc.id, "Items":items, }); }); this.setState({ orders: orders }); // console.log(this.state.orders); }); } catch (err) { console.log(err); } } render() { return ( <div> <MUIDataTable title={"Pending Orders"} columns={this.columns} data={this.state.orders} options={this.options} /> </div> ); } }
Mui-dataTables:如何在一列中显示这些项目数组?
这是我从Firestore获取数据的代码。 类悬浮台实扩展了组件{ constructor(){ 极好的(); this.state = {orders:[]}; } 列= [ “订购我...
Mui-dataTables:如何从可扩展行内的firestore传递文本数据,并在设置处传递文档ID?
在Firestore中,我有此字段标题,创建日期和文本。我如何在MUI-DataTable中显示字段标题并创建了DEDATE。然后将在扩展的行中显示文本。怎么...
async function batchDeleteDocuments(docID, historyId) { try { console.log(docID, "docs"); console.log(historyId, "history"); const batch = writeBatch(db); for (let i = 0; i < docID.length; i++) { const docRef = doc(db, "display", docID[i], "history", historyId[i]); console.log(i, "deleting", docRef.path); batch.delete(docRef); } await batch.commit(); console.log("deleted"); } catch (err) { console.log(err); } }
如何将Firestore Collection文档下载到我的本地PC
如何将Firestore收藏量下载到本地PC以制作一个过程,然后再次将其上传到Firestore。 我从Gcloud Console下载了该系列,但该系列没有打开,...
YANGANANDY上计算3个彼此依赖的文本字段,例如Flutter
因此,我的财务应用程序中有这三个字段,名为金额,费率和总数。我使用控制器来获取值。通常是用户给出的费率。我希望金额字段动态更改gi ...
(客户端库 - > node)中提供的代码,如下所示进行了稍作调整:
图像不上传到firebase存储加上图像URL不上传到firestore
import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:iinhouse/core/utils/utils.dart'; import 'package:iinhouse/core/widgets/birthdate_picker.dart'; import 'package:iinhouse/core/widgets/gender_picker.dart'; import 'package:iinhouse/core/widgets/pick_image.dart'; import 'package:iinhouse/features/authentication/providers/auth_provider.dart'; import 'package:iinhouse/features/authentication/utils.dart'; import 'package:image_picker/image_picker.dart'; class CreateAccountPage extends ConsumerStatefulWidget { const CreateAccountPage({super.key}); @override ConsumerState<CreateAccountPage> createState() => _CreateAccountPageState(); } class _CreateAccountPageState extends ConsumerState<CreateAccountPage> { late final TextEditingController _firstNameController; late final TextEditingController _lastNameController; late final TextEditingController _emailController; late final TextEditingController _passwordController; XFile? image; DateTime? birthday; String gender = 'male'; bool isLoading = false; final _formKey = GlobalKey<FormState>(); @override void initState() { _firstNameController = TextEditingController(); _lastNameController = TextEditingController(); _emailController = TextEditingController(); _passwordController = TextEditingController(); super.initState(); } @override void dispose() { _firstNameController.dispose(); _lastNameController.dispose(); _emailController.dispose(); _passwordController.dispose(); super.dispose(); } Future<void> createAccount() async { if (_formKey.currentState!.validate()) { setState(() { isLoading = true; }); _formKey.currentState!.save(); await ref .read(authProvider) .createAccount( fullName: '${_firstNameController.text} ${_lastNameController.text}', birthDate: birthday ?? DateTime.now(), gender: gender, email: _emailController.text, password: _passwordController.text, image: image) .then((credential) { if (!credential!.user!.emailVerified) { Navigator.pushNamed(context, '/verify_email'); } }).catchError((_) { setState(() { isLoading = false; }); }); setState(() { isLoading = false; }); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, appBar: AppBar(), body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(8.0), child: Form( key: _formKey, child: Column( children: [ GestureDetector( onTap: () async { image = await pickImage(); if (image != null) { print('Image picked: ${image!.path}'); } else { print('Image picking cancelled'); } setState(() {}); }, child: PickImageWidget(image: image)), Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( controller: _firstNameController, validator: (value) => value!.isEmpty ? 'First name cannot be empty' : null, decoration: const InputDecoration( filled: true, fillColor: Colors.white, labelText: 'First Name', hintText: 'First Name', border: OutlineInputBorder(), ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( controller: _lastNameController, validator: (value) => value!.isEmpty ? 'Location cannot be empty' : null, decoration: const InputDecoration( filled: true, fillColor: Colors.white, labelText: 'Last Name', hintText: 'Last Name', border: OutlineInputBorder(), ), ), ), SizedBox( height: 20, ), BirthdatePicker( dateTime: birthday ?? DateTime.now(), onPressed: () async { birthday = await pickSimpleDate( context: context, date: birthday); setState(() {}); }), SizedBox( height: 20, ), GenderPicker( gender: gender, onChanged: (value) { gender = value ?? 'male'; setState(() {}); }), Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( controller: _emailController, validator: (value) => value!.isEmpty ? 'Email cannot be empty' : null, decoration: const InputDecoration( filled: true, fillColor: Colors.white, labelText: 'Email', hintText: 'Email', border: OutlineInputBorder(), ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( controller: _passwordController, validator: (value) => value!.isEmpty ? 'Password cannot be empty' : null, decoration: const InputDecoration( filled: true, fillColor: Colors.white, labelText: 'Password', hintText: 'Password', border: OutlineInputBorder(), ), obscureText: true, ), ), isLoading ? const Center( child: CircularProgressIndicator(), ) : Padding( padding: const EdgeInsets.all(8.0), child: ElevatedButton( onPressed: createAccount, style: ElevatedButton.styleFrom( backgroundColor: Colors.black, fixedSize: const Size(350, 50), disabledForegroundColor: Colors.black.withOpacity(0.38), disabledBackgroundColor: Colors.black.withOpacity(0.12), shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(25.0)), ), ), child: const Text( 'Next', style: TextStyle(color: Colors.white), ), ), ), ], )), ), ), ); } }
在https://firebase.google.com/docs/reference/js/firestore_.transaction上看,我看到了四个方法:删除,设置,get,更新。 我正要构建一个可爱的小收藏查询并通过...
我正在尝试使用Firestore Export Tool的Beta版本在Firestore中导出/导入特定的子收集。
Companies/{Company}/用户
我不明白为什么我会获得以下代码的权限拒绝错误。 stream = firebasefirestore.intance .Collection(“事件”) .doc(widget.event.id) .Collection('Invitat ...