当网络连接恢复时,使用 Bloc /Cubit 颤振不会发生自动刷新?

Posted

技术标签:

【中文标题】当网络连接恢复时,使用 Bloc /Cubit 颤振不会发生自动刷新?【英文标题】:When network connectivity comes back auto refresh not happen using Bloc /Cubit flutter? 【发布时间】:2021-10-30 01:03:34 【问题描述】:

我设计了 3 个底部导航点击,即仪表板、主页、设置。由于某种原因网络问题,我在主屏幕上。所以导航到仪表板屏幕。该应用程序显示一条消息,例如没有互联网连接点击重试。点击点击重试仪表板屏幕已连接并且工作正常。然后转到主页仍然显示错误消息小部件。

当互联网连接返回页面时,它不刷新是否可以这样做,我尝试使用下面的示例代码:

class MyApp extends StatelessWidget 
@override
Widget build(BuildContext context)     
final Connectivity connectivity=Connectivity();
return MultiBlocProvider(
    providers: [          
      BlocProvider(
      create: (context) => InternetCubit(connectivity: connectivity)),
       ],
  child: MaterialApp(home:BottomNavScreen())
  );

BottomNavScreen 构建

@override
Widget build(BuildContext context)    
Repository repository =Repository(networkService: NetworkService());
return MultiBlocProvider(
    providers: [
      BlocProvider(
          create: (BuildContext context) => DashCubit(
            repository: repository,
            //todosCubit: getOtpCubit,
          )),         
      BlocProvider(
          create: (BuildContext context) => HomeCubit(
            repository: repository,
            //todosCubit: getOtpCubit,
          )),
      

    ],
    child:

    BlocBuilder<InternetCubit, InternetState>(
      builder: (context, state)          
        return   Scaffold(
          body:Center(
            child: PersistentTabView(
              context,
              controller: _controller,
              screens: _buildScreens(),
              items: _navBarsItems(themeData),                  
              ),                  
            ),
          )
          ,
        );
      ,
    ),

    );

主屏幕

  @override
  Widget build(BuildContext context)    
  return
    BlocListener<InternetCubit, InternetState>(
      listener: (context, state) 
        if (state is InternetDisconnected )              
           Scaffold.of(context).showSnackBar(SnackBar(
          content: Text('InternetDisconnected'),
          backgroundColor: Colors.red,
        ));
        
      ,
     child: Scaffold(         
      body:
      BlocConsumer<HomeCubit, HomeState>(
        listener: (context, state)             
        ,
        builder: (context, state)               
           if (state is ErrorState)                
            return Container(
              height: double.infinity,
              child: ErrorTxt(
                message: '$error\n\nTap to Retry.',
                ontap: _loadAlbums,
              ),
            );
          
          else if (state is HomeLoaded) 
            return
                Container(                    
                );
          
        ,
      )

  ),
    );
  

如何解决这个问题请帮我解决这个问题

【问题讨论】:

【参考方案1】:

它在 Internet 状态连接内工作以加载小部件。我尝试使用以下引用的链接 https://github.com/TheWCKD/blocFromZeroToHero/tree/master/%237%20- %20BLoC%20通讯

    BlocBuilder<InternetCubit, InternetState>(
    builder: (context, state) 
      if (state is InternetConnected ) 
        return buildBlocConsumer();
      
      else if (state is InternetDisconnected) 
        return ErrorTxt(
          message: 'Check Network Connection \n\n Tap to Retry ',
          ontap: _loadAlbums,
        );
      
      return buildBlocConsumer();

还有其他答案吗?

【讨论】:

以上是关于当网络连接恢复时,使用 Bloc /Cubit 颤振不会发生自动刷新?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bloc/Cubit 进行 Flutter 状态管理

调度第一个 bloc 事件或 cubit 方法,在 StatelessWidget 内的页面开始

我需要处置cubit实例吗?

使用相同 Bloc/Cubit 的多个 BlocBuilder,每个 BlocBuilder 用于不同的事件

如何知道我应该从 BLOC 或 Cubit 中选择啥

我正在借助 bloc(cubit)创建异步计数器应用程序,每次计数器返回 0 时我都会发出加载状态