所以我跟踪了bloc login tutorial个,虽然我设法完成了它,但我仍然是Ffltter&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();
        }
      },
    ),
  ),
);

我已try 添加Navigation.Push包装退货,如下所示:

if (state is AuthenticationUninitialized) {
  Navigation.push(
    return SplashPage();
  ),
}

但是,虽然在语法上没有错误,但这会使应用程序崩溃.有没有人知道在维护BLOC示例的同时实现这一点的方法?谢谢.

推荐答案

您可以用AnimatedSwitcher页换行:

return BlocProvider<AuthenticationBloc>(
  bloc: authenticationBloc,
  child: MaterialApp(
    home: BlocBuilder<AuthenticationEvent, AuthenticationState>(
      bloc: authenticationBloc,
      builder: (BuildContext context, AuthState state) {
        return AnimatedSwitcher(
          duration: Duration(milliseconds: 250),
          child: _buildPage(context, state),
        );
      },
    ),
  ),
);

默认情况下,它使用淡入淡出过渡,并以相反的顺序设置新旧小部件的动画.


要在动画过程中保持旧小部件不变,请传递给AnimatedSwitcher

switchOutCurve: Threshold(0),

要在Android中模拟Navigator.push过渡,请传递它

transitionBuilder: (Widget child, Animation<double> animation) {
  return SlideTransition(
    position: Tween<Offset>(
      begin: const Offset(0, 0.25),
      end: Offset.zero,
    ).animate(animation),
    child: child,
  );
},

要使用系统转换,请try 类似于

transitionBuilder: (Widget child, Animation<double> animation) {
  final theme = Theme.of(context).pageTransitionsTheme;
  final prev = MaterialPageRoute(builder: (_) => widget);
  return theme.buildTransitions(prev, context, animation, null, child);
},

(最后一个测试不好)

Flutter相关问答推荐

壁炉有序在Flutter

为什么Flutter InAppWebView中的DatePicker看起来很旧?

在Flutter TextField中计算子字符串位置

缩短经常使用的行Theme.of(context).colorScheme

为什么PUT方法没有发出任何响应?

与FTPS连接时出现Flutter FTPConnect HandshakeException错误

如何管理枚举类型的阻塞事件?

在VSCode中运行应用程序而不进行调试时,控制台仍显示为调试模式

如何在Flutter Webview包中触发基于URL导航的事件

StateNotifer正在riverpod中提供初始状态值(bool)

处理 flutter/dart 模型中的空值

Flutter:使用不包含导航器的上下文请求导航器操作

断言失败:std::move(hal_2_1_verifier).Run(). 初始化,LE音频客户端至少需要Bluetooth音频HAL V2.1

在 Flutter 中更改喜欢按钮的 colored颜色

Flutter - firebase_auth_web 5.4.0 依赖于 intl ^0.17.0 但我必须使用更高版本 (intl ^0.18.0)

使用堆栈的自定义按钮

你如何在 Flutter 中组合两个数组?

Flutter 中的无效日期格式 2022 年 11 月 14 日

如何在 flutter 中更改日期 Select 器 colored颜色 ?

小部件库捕获的 Flutter 异常