【问题标题】:transition animation problem in flutter when using TextField使用TextField时颤动中的过渡动画问题
【发布时间】:2021-05-16 00:06:19
【问题描述】:

我的过渡动画不适用于具有 TextField 的页面。 当我删除 TextField 时,动画可以正常工作。 有人知道怎么回事吗?

【问题讨论】:

  • 你能添加一些代码吗?
  • 没有代码无法理解
  • @BabC 我在答案中添加了代码
  • @JanviPatel 看到答案

标签: flutter flutter-animation


【解决方案1】:

这是我的滑块动画:

class SlideLeftRoute extends PageRouteBuilder {
  final Widget page;
  SlideLeftRoute({this.page})
      : super(
    pageBuilder: (
        BuildContext context,
        Animation<double> animation,
        Animation<double> secondaryAnimation,
        ) =>
    page,
    transitionsBuilder: (
        BuildContext context,
        Animation<double> animation,
        Animation<double> secondaryAnimation,
        Widget child,
        ) =>
        SlideTransition(
          position: Tween<Offset>(
            begin: const Offset(1, 0),
            end: Offset.zero,
          ).animate(animation),
          child: child,
        ),
  );
}

这是我的页面:

class VerifyAuthPage extends StatelessWidget {
  final String phone;
  final int expTime;

  VerifyAuthPage({Key key, @required this.phone, @required this.expTime});

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: Container(color: Colors.red,

           child: TextField(),

      ),);
  }

这是我的根应用程序:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: BanijetColors.PRIMARY,
      statusBarBrightness: Brightness.light,
    ));

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        fontFamily: 'IranSanse',
        primaryColor: Colors.PRIMARY,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: Splash(),
      initialRoute: 'splash',
      onGenerateRoute: (RouteSettings setting) {
        return mapNamesToRoutes(setting);
      },
    );
  }
}

这是 mapNamesToRoute 函数:

SlideLeftRoute mapNamesToRoutes(RouteSettings setting) {
  Widget destination;

  final requestAuthCubit = sl<RequestAuthCubit>();
  final verifyAuthCubit = sl<VerifyAuthCubit>();

  switch (setting.name) {
    case 'splash':
      destination = Splash();
      break;
    case 'auth/request':
      destination = MultiBlocProvider(providers: [
        BlocProvider(
            create: (_) => InputValidationCubit(
                inputType: InputType.Phone,
                inputValidator: sl<InputValidator>())),
        BlocProvider.value(value: requestAuthCubit)
      ], child: RequestAuthPage());

      break;

    case 'auth/verify':
      final Map<String, Object> bundle = setting.arguments;
      destination = MultiBlocProvider(providers: [
        BlocProvider(
            create: (_) => InputValidationCubit(
                inputType: InputType.VerificationCode,
                inputValidator: sl<InputValidator>())),
        BlocProvider.value(value: requestAuthCubit),
        BlocProvider.value(value: verifyAuthCubit),
        BlocProvider.value(value: sl<TimerCubit>()),
      ], child: VerifyAuthPage(phone: bundle['phone'], expTime: bundle['exp']));
      break;
    default:
      destination = null;
  }

  return SlideLeftRoute(page: destination);
}

这是我的启动页面:

class Splash extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StatefulWrapper(
        onInit: () async {
          Future.delayed(const Duration(milliseconds: 2000), () {
            Navigator.pushReplacementNamed(context, 'auth/verify',
                arguments: {'phone': '**********', 'exp': 120});
          });
        },
        child: Scaffold(
          body: Container(
            child: Center(child: Text('Splash Screen')
                // child: Text('Splash Screen'),
                ),
          ),
        ));
  }
}

【讨论】:

  • @JanviPatel TextField 引起的错误,当我删除它时,动画工作
  • @JanviPatel 再试一次
  • @JanviPatel 你的版本是什么?
  • @JanviPatel 密码是 5t4f6k 再试一次
  • @JanviPatel 不,我使用 Windows 我可以给你一个回购链接
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2019-01-13
  • 2019-11-09
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 2015-02-06
相关资源
最近更新 更多