【问题标题】:Value Provider returns null for the first timeValue Provider 首次返回 null
【发布时间】:2020-12-11 09:19:28
【问题描述】:

我有以下应用程序,我使用MultiProvider 提供FirebaseUser 流。

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider<Position>(
          create: (_) => LocationService().location,
        ),
        StreamProvider<FirebaseUser>(
          create: (_) => AuthenticationService().user,
        ),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: "title",
        theme: ThemeData(
          primarySwatch: Colors.indigo,
          accentColor: Colors.indigoAccent,
        ),
        home: HomeScreen(),
    );
  }
}

流生成如下:

class AuthenticationService {
    Stream<FirebaseUser> get user {
        return FirebaseAuth.instance.onAuthStateChanged;
    }
}

当用户使用Firebase 登录并在HomeScreen 中访问流时,我第一次得到null 的值。从第二次开始,它工作正常。

class HomeScreenState extends State<HomeScreen> {
  FirebaseUser u;

  @override
  void initState() {
    u = Provider.of<FirebaseUser>(context, listen: false);
    print(u);
    super.initState();
  }
}

如何确保Provider.of 返回有效值(即null 仅在用户实际未登录时返回non-null 值在登录时)或某种undefined 值如果值未知?

【问题讨论】:

标签: firebase flutter firebase-authentication provider


【解决方案1】:

我在使用 multiprovider 和 Provider.of&lt;FirebaseUser&gt;(). 时也看到了类似的问题 第一次 provider.of 返回 null ,如果用户已登录,则返回一个有效用户。

作为一种解决方法,我在下面做

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

  Future _initialiseFirebase() async {
    try {
      await Firebase.initializeApp();
      sub = FirebaseAuth.instance.authStateChanges().listen((user) {
        //  listener is called on registered. So we need to skip calling viewmodel for first time.
        if (_authListenerRegistered) _viewmodel.verifyAuth(user);
        _authListenerRegistered = true;
      });
    } catch (e) {
      setState(() {
        _error = true;
      });
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2013-04-18
    • 2021-04-12
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多