用户注销时如何处理 Flutter 中 StreamProvider 的值?

时间:2021-02-21 06:21:37

标签: flutter firebase-authentication flutter-provider

我有一个应用程序,我使用 StreamProvider 从 Firestore 获取数据并在应用程序中传递它。虽然它按我的意愿工作,但当我从不同的用户 ID 注销并再次登录时会出现问题,它仍然显示来自第一个用户的数据。我该怎么做才能确保 StreamProvider 在用户注销时处理当前值,并在新用户登录时重新获取正确的用户数据?这是我的代码

main.dart

val list = listOf(0,1,2,3,4,5,0)
val mutableList = mutableListOf()
val set = HashSet<String>()

for(l in list) {
  if(set.contains(l)) mutableList.add(l)
  set.add(l)
}

db.getAppointments() 方法

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}


class MyApp extends StatelessWidget {
  final db = Database();
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        Provider<AuthenticationService>(
          create: (_) => AuthenticationService(FirebaseAuth.instance),
        ),
        StreamProvider(
        //  key: ObjectKey(FirebaseAuth.instance.currentUser.uid),
          create: (context) =>
              context.read<AuthenticationService>().authStateChanges,
        ),
        ChangeNotifierProvider<AppointmentProvider>(
          create: (_) => AppointmentProvider(),
        ),
        StreamProvider(
          catchError: (context, error) {
            print(error);
          },
          create: (BuildContext context) => db.getAppointments(),
        ),
      ],
      child: MaterialApp(
        key: GlobalObjectKey(context),
        debugShowCheckedModeBanner: false,
        title: 'Hospital App',
        theme: appTheme,
        home: AuthenticationWrapper(),
      ),
    );
  }
}

0 个答案:

没有答案
相关问题