代码之家  ›  专栏  ›  技术社区  ›  attdona

如何使用flutter配置firebase firestore设置

  •  11
  • attdona  · 技术社区  · 7 年前

    我正在评估 Firestore Plugin for Flutter 是的。

    此代码片段按预期工作,当按下中的浮动按钮时,它会将记录插入firestore:

    import 'package:flutter/material.dart';
    import 'package:cloud_firestore/cloud_firestore.dart';
    
    void main() => runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          title: 'Flutter Demo',
          theme: new ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: new MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => new _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
    
      Firestore firestore;
    
      _MyHomePageState() {
        firestore = Firestore.instance;
      }
    
      void _addBoard() {
        setState(() {
          _counter++;
          firestore.collection("boards").document().setData({ 'name': 'mote_$_counter', 'descr': 'long descr $_counter' });
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text(widget.title),
          ),
          body: new Center(
            child: new Column(
             mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new Text(
                  'You have pushed the button this many times:',
                ),
                new Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
            ),
          ),
          floatingActionButton: new FloatingActionButton(
            onPressed: _addBoard,
            child: new Icon(Icons.add),
          ), 
      }
    }
    

    与一起跑步 flutter run 控制台显示警告:

    W/Firestore(31567): (0.6.6-dev) [Firestore]: The behavior for java.util.Date objects stored in Firestore is going to change AND YOUR APP MAY BREAK.
    W/Firestore(31567): To hide this warning and ensure your app does not break, you need to add the following code to your app before calling any other Cloud Firestore methods:
    W/Firestore(31567): 
    W/Firestore(31567): FirebaseFirestore firestore = FirebaseFirestore.getInstance();
    W/Firestore(31567): FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
    W/Firestore(31567):     .setTimestampsInSnapshotsEnabled(true)
    W/Firestore(31567):     .build();
    W/Firestore(31567): firestore.setFirestoreSettings(settings);
    W/Firestore(31567): 
    W/Firestore(31567): With this change, timestamps stored in Cloud Firestore will be read back as com.google.firebase.Timestamp objects instead of as system java.util.Date objects. So you will also need to update code expecting a java.util.Date to instead expect a Timest        
    

    有一种方法可以配置firebasefirestore实例,从而用日期设置解决此问题?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Osfed    7 年前

    它应该在0.8.2版中解决。

    example 如何使用设置。

        2
  •  10
  •   KhoPhi    7 年前

    问题已从cloud_firestore 0.8.2中解决,请先在中升级依赖项 pubspec.yaml 致:

    dependencies:
      cloud_firestore: ^0.8.2+1
    

    Firestore::setting 返回未来,因此必须在异步函数中调用它。

    这足以使works成为示例代码:

    void main() async {
      final Firestore firestore = Firestore();
      await firestore.settings(timestampsInSnapshotsEnabled: true);
    
      runApp(new MyApp());
    }
    

    然后,在实际添加文档时, 明确地 添加 createdAt (或者随便你叫什么)菲尔德,就像这样:

        Firestore.instance
            .collection('customer')
            .add({
          "name": customerNameController.text,
          "createdAt": FieldValue.serverTimestamp()
        }).then((res) { ...