繁体   English   中英

我们可以在材料应用程序 Flutter 之前听 stream 值吗?

[英]Can we listen to stream value before material app Flutter?

我正在尝试在应用程序启动之前加载启动画面。

当用户点击应用程序时,将加载启动画面。

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<Users>(
      stream: AuthService().user,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return MaterialApp(home: Splash());
        } else {
          // Loading is done, return the app:
          return MaterialApp(
            home: Scaffold(body: Wrapper()),
          );
        }
      },
    );
  }
}

这是包装器。dart

class Wrapper extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final user = Provider.of<Users>(context);
    print(user);
    //Return either home or authenticate widget
    return user == null ? Authenticate() : Home();
  }
}

这是飞溅。dart

class Splash extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
          child: Container(
        width: double.infinity,
        height: double.infinity,
        color: Colors.black,
        child: Center(
            child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            Icon(
              Icons.movie,
              color: Colors.white,
              size: 30,
            ),
            Text(
              'Loading App',
              style: TextStyle(color: Colors.white, fontSize: 30),
            ),
          ],
        )),
      )),
    );
  }
}

这是来自 firebase 的 stream:

class AuthService{
      final FirebaseAuth _auth = FirebaseAuth.instance;
    //Create User object based on FireBase
      Users _userFromFirebaseUser(User user) {
        return user != null ? Users(uid: user.uid) : null;
      }
    
      //auth change user stream
      Stream<Users> get user {
        return _auth.authStateChanges().map(_userFromFirebaseUser);
      }
}

错误:在此 Wrapper Widget 上方找不到正确的Provider<Users> 但我在 MyApp class 的 warpper 上方提供了一个 Stream 用户。

你实际上并没有提供用户,你所做的只是用 StreamBuilder 包装你的代码,它监听 stream 但它不会“提供”任何下游的东西。 为了提供价值以便提供者访问它,您应该使用 StreamProvider 而不是 StreamBuilder,请参阅此处的文档和此处的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM