首页 > 解决方案 > 不同用户 Flutter 的不同内容

问题描述

我一直在构建一个应用程序,用户可以在其中预订猫美容。我已经将应用程序连接到 Firebase,用户可以在其中注册和登录应用程序。这是问题所在,每次我使用不同的用户帐户登录时,其他用户的预订历史仍然存在。

在此处输入图像描述

如何为登录的不同用户制作不同的内容?所以每个用户都可以拥有自己的内容。这是历史页面中的代码。

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class HistoryPage extends StatefulWidget {
  static const String id = 'HistoryPage';
  @override
  _HistoryPageState createState() => _HistoryPageState();
}

class _HistoryPageState extends State<HistoryPage> {
  final _firestore = Firestore.instance;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
          child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Container(
            margin: EdgeInsets.fromLTRB(25.0, 68.0, 70.0, 25.0),
            child: Text(
              'History',
              style: TextStyle(fontSize: 35.0),
            ),
          ),
          Column(
            children: <Widget>[
              StreamBuilder<QuerySnapshot>(
                stream: _firestore.collection('ReservationData').snapshots(),
                builder: (context, snapshot) {
                  if (!snapshot.hasData) {
                    return Center(
                      child: CircularProgressIndicator(),
                    );
                  }
                  final messages = snapshot.data.documents;
                  List<HistoryBox> historyWidgets = [];
                  for (var message in messages) {
                    final historyDate = message.data['Reservation Date'];
                    final historyTime = message.data['Reservation Time'];
                    final historyWidget =
                        HistoryBox(date: historyDate, time: historyTime);
                    historyWidgets.add(historyWidget);
                  }
                  return Column(
                    children: historyWidgets,
                  );
                },
              ),
            ],
          )
        ],
      )),
    );
  }
}

class HistoryBox extends StatelessWidget {
  final String date;
  final String time;

  HistoryBox({this.date, this.time});
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 25.0),
      child: Material(
        elevation: 5.0,
        child: Container(
          child: Text(
            'Date Reservation : \n $date and $time',
            style: TextStyle(
              fontSize: 20.0,
            ),
          ),
        ),
      ),
    );
  }
}

(更新)

这是用户注册的代码。

import 'package:flutter/material.dart';
import 'package:project_pi/screens/HomePage/home_page.dart';
import 'inputform_signup.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class SignUpPage extends StatefulWidget {
  static const String id = 'SignUpPage';
  @override
  _SignUpPageState createState() => _SignUpPageState();
}

class _SignUpPageState extends State<SignUpPage> {
  final _firestore = Firestore.instance;
  final _auth = FirebaseAuth.instance;
  bool showSpinner = false;
  String nama;
  String email;
  String password;
  String phoneNumber;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ModalProgressHUD(
        inAsyncCall: showSpinner,
        child: Form(
          child: SafeArea(
            child: Center(
              child: SingleChildScrollView(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Text(
                      'SIGN UP',
                      style: TextStyle(
                        fontSize: 28.0,
                      ),
                    ),
                    InputForm(
                      hint: 'Full Name',
                      hidetext: false,
                      onChanged: (value) {
                        nama = value;
                      },
                    ),
                    InputForm(
                      hint: 'Email Address',
                      hidetext: false,
                      onChanged: (value) {
                        email = value;
                      },
                    ),
                    InputForm(
                      hint: 'Phone Number',
                      hidetext: false,
                      onChanged: (value) {
                        phoneNumber = value;
                      },
                    ),
                    InputForm(
                      hint: 'Password',
                      hidetext: true,
                      onChanged: (value) {
                        password = value;
                      },
                    ),
                    InputForm(
                      hint: 'Confirm Password',
                      hidetext: true,
                    ),
                    SizedBox(height: 15.0),
                    Container(
                      height: 45.0,
                      width: 270.0,
                      child: RaisedButton(
                        child: Text('SIGN UP'),
                        onPressed: () async {
                          setState(() {
                            showSpinner = true;
                          });
                          try {
                            final newUser =
                                await _auth.createUserWithEmailAndPassword(
                                    email: email, password: password);

                            _firestore.collection('UserAccount').add({
                              'Email Address': email,
                              'Full Name': nama,
                              'Phone Number': phoneNumber,
                            });
                            if (newUser != null) {
                              Navigator.pushNamed(context, HomePage.id);
                            }
                            setState(() {
                              showSpinner = false;
                            });
                          } catch (e) {
                            print(e);
                          }
                        },
                      ),
                    ),
                    SizedBox(
                      height: 15.0,
                    ),
                    Text('Have an Account?'),
                    SizedBox(
                      height: 7.5,
                    ),
                    InkWell(
                      child: Text(
                        'SIGN IN',
                        style: TextStyle(
                          color: Colors.red,
                        ),
                      ),
                      onTap: () {
                        AlertDialog(
                          title: Text("Finish?"),
                          content: Text("Are you sure with the data?"),
                          actions: <Widget>[
                            FlatButton(onPressed: null, child: null)
                          ],
                        );
                      },
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

这是当前登录用户的类

import 'package:flutter/material.dart';
import 'package:project_pi/screens/HomePage/homebutton.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:project_pi/screens/LiveMaps/live_maps.dart';
import 'package:project_pi/screens/LoginPage/HalamanLogin.dart';
import 'package:project_pi/screens/ReservationHistory/history_page.dart';
import 'package:project_pi/screens/ReservationPage/information_detail.dart';

class HomePage extends StatefulWidget {
  static const String id = "HomePage";

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final _auth = FirebaseAuth.instance;
  FirebaseUser loggedInUser;

  @override
  void initState() {
    super.initState();
    getCurrentUser();
  }

  void getCurrentUser() async {
    try {
      final user = await _auth.currentUser();
      if (user != null) {
        loggedInUser = user;
      }
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Expanded(
          child: Container(
            child: Column(
              children: <Widget>[
                Container(
                  margin: EdgeInsets.fromLTRB(25.0, 68.0, 256.0, 47.0),
                  child: Text(
                    'Home',
                    style: TextStyle(fontSize: 35.0),
                  ),
                ),
                Center(
                  child: Column(
                    children: <Widget>[
                      HomeNavButton(
                        prefixIcon: Icons.date_range,
                        textbutton: 'Make Reservation',
                        onPressed: () {
                          Navigator.pushNamed(context, InformationDetail.id);
                        },
                      ),
                      SizedBox(
                        height: 40.0,
                      ),
                      HomeNavButton(
                        prefixIcon: Icons.list,
                        textbutton: 'Reservation History',
                        onPressed: () {
                          Navigator.pushNamed(context, HistoryPage.id);
                        },
                      ),
                      SizedBox(
                        height: 40.0,
                      ),
                      HomeNavButton(
                        prefixIcon: Icons.gps_fixed,
                        textbutton: 'Live Maps Track',
                        onPressed: () {
                          Navigator.pushNamed(context, LiveMaps.id);
                        },
                      ),
                      SizedBox(
                        height: 40.0,
                      ),
                      HomeNavButton(
                        prefixIcon: Icons.person,
                        textbutton: 'Account Profile',
                        onPressed: () {
                          FirebaseAuth.instance.signOut();
                          Navigator.pushNamed(context, HalamanLogin.id);
                        },
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

如何为每个登录的当前用户实现过滤器,以便它可以根据用户显示内容?

标签: firebasefluttergoogle-cloud-firestorefirebase-authentication

解决方案


当用户通过firebase创建帐户时,他们会被分配一个uid userId,可以通过

     String userId;
  getCurrentUser() async {
    FirebaseUser firebaseUser = await FirebaseAuth.instance.currentUser();
    setState(() {
      userId = firebaseUser.uid;
    });
 
  }

然后在保存预订时,您可以包含一个字段"userId":userid

现在,当您查询时,您可以查询您的 currentUser

_firestore.collection('ReservationData') .where("userId", isEqualTo: userId).snapshots(),

推荐阅读