gpt4 book ai didi

flutter - 如何从构建两次的小部件中延迟重定向

转载 作者:IT王子 更新时间:2023-10-29 07:12:27 25 4
gpt4 key购买 nike

在我的应用程序的初始屏幕上,我使用 SystemChrome 设置状态栏颜色并发出延迟重定向到主屏幕:

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

void main() {
runApp(App());
}

class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light(),
title: 'App',
routes: {'/': (context) => First(),
'/2': (context) => Second()},
);
}
}

class First extends StatelessWidget {
Future<void> _navigateToFollowUpRoute(BuildContext context) async {
Future.delayed(Duration(seconds: 2), () => Navigator.of(context).pushReplacementNamed('/2'));
}

@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light.copyWith(
statusBarColor: Colors.black,
));
print('building first');
_navigateToFollowUpRoute(context);
return Scaffold(
body: Center(child: Text("go")),
);
}
}


class Second extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text("second")),);
}
}

调用 setSystemUIOverlayStyle() 似乎会导致小部件重建,这会触发两次延迟,从而导致重定向被调用两次。当然,这会导致有关违反上下文访问的异常(即使没有这个,它也会不必要地构建 Second 小部件两次。

是否有一种非 hacky 的方式(在这里考虑一个有状态的小部件,“记住”最初发出的重定向并抑制第二个)来解决这个问题?

注意:我需要在函数内进行重定向,以便动态分配辅助路由(为简单起见,仅在示例中进行了硬编码)。

最佳答案

当我需要在第一次创建小部件时执行一次操作时,我通常会把它做成一个有状态的小部件,并从 initState 方法中进行一次性调用。

其他可能有用的是设置系统覆盖的 AnnotatedRegion 方法:

new AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.light.copyWith(
statusBarColor: Colors.black,
),
child: ....,
);

关于flutter - 如何从构建两次的小部件中延迟重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54795526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com