Flutter 着陆页导航用户取决于状态
Flutter landing page to navigate user depends on a state
如何将用户导航到相关屏幕?例如,如果用户已登录,则用户必须进入首页,但用户未登录,则用户必须进入登录页面。当我尝试使用导航器时,它给出了这个错误:
FlutterError(构建期间调用了 setState() 或 markNeedsBuild()。
无法将此 Overlay 小部件标记为需要构建,因为框架已经在构建小部件的过程中。仅当其祖先之一当前正在构建时,才可以在构建阶段将小部件标记为需要构建。这个例外是允许的,因为框架在子部件之前构建父部件,这意味着总是会构建一个脏的后代部件。否则,框架可能不会在此构建阶段访问此小部件。
调用 setState() 或 markNeedsBuild() 的小部件是:
覆盖-[LabeledGlobalKey#3ba8a]
进行违规调用时当前正在构建的小部件是:
BlocBuilder)
此外,我使用了自动路由和自动路由生成器,但它给出的错误是:The getter 'RouteInformationReportingType' isn't defined for the class 'AutoRouteInformationProvider'。 package:auto_route/…/provider/auto_route_information_provider.dart:32
你能帮帮我吗?
代码:
class LandingPage extends StatelessWidget {
const LandingPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocBuilder<AuthCubit, AuthState>(
builder: (context, state) {
if (state.isUserSignedIn) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const HomePage()),
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SignInPage()),
);
}
return Container();
},
),
);
}
}
你必须像这样更改代码,这将在所有小部件初始化后显示,因此它将在所有小部件初始化后导航。
if (state.isUserSignedIn) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const HomePage()),
);
} else {
WidgetsBinding.instance!.addPostFrameCallback((_) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SignInPage()),
);
});
}
我已将 flutter sdk 更新到 2.8 并更改了一些语法。就是这样
如何将用户导航到相关屏幕?例如,如果用户已登录,则用户必须进入首页,但用户未登录,则用户必须进入登录页面。当我尝试使用导航器时,它给出了这个错误:
FlutterError(构建期间调用了 setState() 或 markNeedsBuild()。
无法将此 Overlay 小部件标记为需要构建,因为框架已经在构建小部件的过程中。仅当其祖先之一当前正在构建时,才可以在构建阶段将小部件标记为需要构建。这个例外是允许的,因为框架在子部件之前构建父部件,这意味着总是会构建一个脏的后代部件。否则,框架可能不会在此构建阶段访问此小部件。
调用 setState() 或 markNeedsBuild() 的小部件是:
覆盖-[LabeledGlobalKey#3ba8a]
进行违规调用时当前正在构建的小部件是:
BlocBuilder
此外,我使用了自动路由和自动路由生成器,但它给出的错误是:The getter 'RouteInformationReportingType' isn't defined for the class 'AutoRouteInformationProvider'。 package:auto_route/…/provider/auto_route_information_provider.dart:32
你能帮帮我吗?
代码:
class LandingPage extends StatelessWidget {
const LandingPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocBuilder<AuthCubit, AuthState>(
builder: (context, state) {
if (state.isUserSignedIn) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const HomePage()),
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SignInPage()),
);
}
return Container();
},
),
);
}
}
你必须像这样更改代码,这将在所有小部件初始化后显示,因此它将在所有小部件初始化后导航。
if (state.isUserSignedIn) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const HomePage()),
);
} else {
WidgetsBinding.instance!.addPostFrameCallback((_) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SignInPage()),
);
});
}
我已将 flutter sdk 更新到 2.8 并更改了一些语法。就是这样