相关疑难解决方法(0)

如何在Flutter中使用Bloc模式进行错误处理?

想象一下我正在使用集团来处理网络请求。如果请求失败,则根据平台的不同,处理失败的方法也会有所不同。在我的Web应用程序上,我想将用户重定向到错误页面,而在IOS应用程序上,我想显示一个对话框。

由于仅应使用bloc并共享它来处理业务逻辑,并且错误处理部分与业务逻辑无关,因此,我们应该请UI部分照顾错误处理。

UI可以将错误回调发送到块,并且当发生错误时,块将运行它。我们还可以通过在不同平台上发送不同的回调,以特定于平台的方式处理错误。

接下来是我的两个问题:

有没有更合适的方法可以做到这一点?

如何将回调发送到集团?

在flutter中,我们只能在initState生命周期方法之后访问bloc (因为我们是从builder上下文中获取bloc的,而后者仅在之后initState)。然后,我们只能在build方法中发送回调。

这样,每次重建时,我们都会重复向回调发送bloc(这些重复没有意义)。使用react,可以在生命周期(例如)中完成一次一次性初始化componentDidMount。在颤振中,我们如何达到只运行一次初始化的目标?

error-handling reactive-programming reactiveui flutter

15
推荐指数
1
解决办法
1727
查看次数

当BLOC中的流值更改时导航到新屏幕

在Flutter中,当流的值更改时如何调用Navigator.push?我已经尝试了下面的代码,但出现错误。

StreamBuilder(
        stream: bloc.streamValue,
        builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
          if (snapshot.hasData && snapshot.data == 1) {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SomeNewScreen()),
            );
          }

          return Text("");
        });
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

mobile ios dart flutter rxdart

11
推荐指数
2
解决办法
1842
查看次数

更改BLoC模式上的Widget时如何添加动画过渡?

因此,我遵循了bloc登录教程,尽管我设法完成了该教程,但对于Flutter&Dart还是很陌生。

代码的一部分,根据状态的不同,代码将返回不同的小部件,而不是新的Scaffold。由于未使用路由,因此页面之间的过渡看起来比较混乱且笨拙。

return BlocProvider<AuthenticationBloc>(
  bloc: authenticationBloc,
  child: MaterialApp(
    debugShowCheckedModeBanner: false,
    home: BlocBuilder<AuthenticationEvent, AuthenticationState>(
      bloc: authenticationBloc,
      builder: (BuildContext context, AuthenticationState state) {
        if (state is AuthenticationUninitialized) {
          return SplashPage();
        }
        if (state is AuthenticationAuthenticated) {
          return HomePage();
        }
        if (state is AuthenticationUnauthenticated) {
          return LoginPage(userRepository: userRepository);
        }
        if (state is AuthenticationLoading) {
          return LoadingIndicator();
        }
      },
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

我尝试添加添加返回的Navigation.push,如下所示:

if (state is AuthenticationUninitialized) {
  Navigation.push(
    return SplashPage();
  ),
}
Run Code Online (Sandbox Code Playgroud)

但是,虽然从语法上看并没有错,但它会使应用程序崩溃。有谁知道在维护BLoC示例的同时实现此目的的方法?谢谢。

flutter flutter-animation bloc

4
推荐指数
1
解决办法
747
查看次数