Flutter:验证后不重定向

svmlkihl  于 2023-03-31  发布在  Flutter
关注(0)|答案(2)|浏览(145)

我在Flutter中做了一个简单的检查,在验证之后,它应该重定向到HomePage()。
我调试并验证了authController.isAuth = true,但它没有引用HomePage()。

class AuthOrHomePage extends StatelessWidget {
  const AuthOrHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    AuthController authController = Provider.of(context);

    return FutureBuilder(
      future: authController.tryAutoLogin(),
      builder: (ctx, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(child: CircularProgressIndicator());
        } else if (snapshot.error != null) {
          return const Center(
            child: Text('Ocorreu um erro!'),
          );
        } else {
          if (authController.isAuth) {
            return const HomePage();
          } else {
            return const InitPage();
          }
        }
      },
    );
  }
}

你知道这可能是什么吗?

inb24sb2

inb24sb21#

在flutter中,如果你想从一个屏幕导航到另一个屏幕,你可以使用Navigator

class AuthOrHomePage extends StatelessWidget {
  const AuthOrHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    AuthController authController = Provider.of(context);

    return FutureBuilder(
      future: authController.tryAutoLogin(),
      builder: (ctx, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(child: CircularProgressIndicator());
        } else if (snapshot.error != null) {
          return const Center(
            child: Text('Ocorreu um erro!'),
          );
        } else {
          if (authController.isAuth) {
            Navigator.of(context).push(MaterialPageRoute(builder: (_) => const HomePage()));
          } else {
            Navigator.of(context).push(MaterialPageRoute(builder: (_) => const InitPage()));
          }
          return SizedBox();
        }
      },
    );
  }
}

更多信息:https://API.flutter.dev/flutter/widgets/Navigator-class.html#:~:text=In%20Flutter%20these%20elements%20are,pop.

2guxujil

2guxujil2#

你试试看,

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class AuthOrHomePage extends StatelessWidget {
  const AuthOrHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    AuthController authController = Provider.of(context);

    return FutureBuilder(
      future: authController.tryAutoLogin(),
      builder: (ctx, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(child: CircularProgressIndicator());
        } else if (snapshot.error != null) {
          return const Center(
            child: Text('Ocorreu um erro!'),
          );
        } else {
          if (authController.isAuth) {
            // Navigate to the HomePage
            WidgetsBinding.instance!.addPostFrameCallback((_) {
              Navigator.pushReplacement(
                context,
                MaterialPageRoute(builder: (context) => const HomePage()),
              );
            });
          } else {
            return const InitPage();
          }
        }
        return const SizedBox.shrink();
      },
    );
  }
}

相关问题