// Copyright 2017, the Chromium project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'dart:async'; import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; Future main() async { final FirebaseApp app = await FirebaseApp.configure( name: 'test', options: const FirebaseOptions( googleAppID: '1:79601577497:ios:5f2bcc6ba8cecddd', gcmSenderID: '79601577497', apiKey: 'AIzaSyArgmRGfB5kiQT6CunAOmKRVKEsxKmy6YI-G72PVU', projectID: 'flutter-firestore', ), ); final Firestore firestore = Firestore(app: app); await firestore.settings(timestampsInSnapshotsEnabled: true); runApp(MaterialApp( title: 'Firestore Example', home: MyHomePage(firestore: firestore))); } class MessageList extends StatelessWidget { MessageList({this.firestore}); final Firestore firestore; @override Widget build(BuildContext context) { return StreamBuilder( stream: firestore.collection('messages').snapshots(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (!snapshot.hasData) return const Text('Loading...'); final int messageCount = snapshot.data.documents.length; return ListView.builder( itemCount: messageCount, itemBuilder: (_, int index) { final DocumentSnapshot document = snapshot.data.documents[index]; return ListTile( title: Text(document['message'] ?? ''), subtitle: Text('Message ${index + 1} of $messageCount'), ); }, ); }, ); } } class MyHomePage extends StatelessWidget { MyHomePage({this.firestore}); final Firestore firestore; CollectionReference get messages => firestore.collection('messages'); Future _addMessage() async { await messages.add({ 'message': 'Hello world!', 'created_at': FieldValue.serverTimestamp(), }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Firestore Example'), ), body: MessageList(firestore: firestore), floatingActionButton: FloatingActionButton( onPressed: _addMessage, tooltip: 'Increment', child: const Icon(Icons.add), ), ); } }