要包含特定文档的StreamProvider,您可以使用以下代码示例:
首先,在您的项目中添加所需的依赖项:
dependencies:
flutter:
sdk: flutter
cloud_firestore: ^2.5.0
provider: ^6.0.1
然后,创建一个StreamProvider,它将返回包含特定文档的数据流。假设您的Firestore集合名为“books”,文档ID为“document_id”,您可以按如下方式创建StreamProvider:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Book {
final String title;
final String author;
Book({required this.title, required this.author});
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider.value(
value: FirebaseFirestore.instance
.collection('books')
.doc('document_id')
.snapshots()
.map((snapshot) => Book(
title: snapshot.get('title'),
author: snapshot.get('author'),
)),
initialData: Book(title: '', author: ''),
child: MaterialApp(
title: 'StreamProvider Demo',
home: HomeScreen(),
),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 使用Provider.of来获取StreamProvider提供的数据
final book = Provider.of(context);
return Scaffold(
appBar: AppBar(
title: Text('StreamProvider Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Title: ${book.title}'),
Text('Author: ${book.author}'),
],
),
),
);
}
}
void main() {
runApp(MyApp());
}
在上面的代码中,我们创建了一个名为“Book”的简单数据模型类。然后,我们在MyApp小部件中使用StreamProvider.value来创建一个StreamProvider。我们将FirebaseFirestore.instance.collection('books').doc('document_id').snapshots()作为数据流的值。通过使用snapshots()方法,我们可以监听特定文档的更改并获取更新后的数据。
我们还指定了一个initialData,它是在数据流暂时不可用时显示的初始数据。
在HomeScreen小部件中,我们使用Provider.of来获取StreamProvider提供的数据。然后,我们在UI中显示了书的标题和作者。
请记住,在使用此代码示例之前,您需要在您的项目中正确配置Firebase和Firestore。
下一篇:包含特定元素的列表