【问题标题】:Provide 'catchError'提供'catchError'
【发布时间】:2020-04-25 00:42:33
【问题描述】:

我想将我的应用程序转换为 Flutter Web,但是当我尝试在本地运行它时出现以下错误

监听的 _MapStream 抛出异常 StreamProvider,但没有提供catchError

异常:NoSuchMethodError:null 上的无效成员:'providerId'

对于如何解决此问题,我希望能提供一些建议。

这是我的 main.dart 文件,以防相关:

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

class MyApp extends StatelessWidget {   
  @override   
  Widget build(BuildContext context) {
     return StreamProvider<User>.value(
       value: AuthService().user,
       child: MaterialApp(
         debugShowCheckedModeBanner: false,
         theme: ThemeData(
           primarySwatch: Colors.blue,
         ),
         home: Wrapper(),
       ),
     );
  }
}

【问题讨论】:

  • 你真正的问题是:NoSuchMethodError: invalid member on null: 'providerId'
  • 我不知道如何解决这个问题。该应用程序在 android 和 iOS 上运行没有问题,我对 Flutter web 非常不熟悉。如果您能提供更多指导,我们将不胜感激。
  • 你需要发布更多的源代码
  • 您在关注 The Net Ninja 教程吗?因为我也有同样的问题。我能够使用 StreamBuilder 而不是 StreamProvider 使其工作。但我更喜欢 StreamProvider 解决方案。
  • @AndreCytryn 很抱歉没有早点回来。你是对的,我正在关注 Net Ninja 教程!您介意分享一下您是如何使用 StreamBuilder 而不是 StreamProvider 来解决问题的吗?

标签: flutter firebase-authentication flutter-web


【解决方案1】:

所以我的第一个解决方案是使用 StreamBuilder 而不是 StreamProvider:

return StreamBuilder(
  stream: AuthService().currentUser,
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return AdminDashboardScreen();
    } else {
      return SignInScreen();
    }
  },
);

但现在我也设法让 StreamProvider 工作了!我发现那里有很多 Firebase 包......你应该用于网络的包是这样的: https://pub.dev/packages/firebase

但是,您应该能够像这样引用它,而不是作为一个类导入和使用:

  import 'package:firebase/firebase.dart' as fb;

  final fb.Auth _firebaseAuth = fb.auth();

  // create user object based on firebase user
  User _userFromFirebaseUser(fb.User user) {
    return user != null ? User(uid: user.uid) : null;
  }

  // auth change user stream
  Stream<User> get currentUser {
    return _firebaseAuth.onAuthStateChanged.map(_userFromFirebaseUser);
  }

  // sign in anon
  Future<User> signInAnon() async {
    try {
      fb.UserCredential result = await _firebaseAuth.signInAnonymously();
      fb.User user = result.user;
      return _userFromFirebaseUser(user);
    } catch (e) {
      print('[AuthService] error signInAnon: ${e.toString()}');
      return null;
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2019-11-18
    • 2019-11-17
    • 2021-11-04
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多