如何解决向 Scaffold Appbar 添加多页点击计数器
您好,我正在使用导航器和路由创建一个包含多个页面的应用程序。 我想向 Scaffold Appbar 添加一个计数器,每次手指点击屏幕按钮时都会增加一个计数器(如果页面中存在多个按钮)。 此外,如果我更改页面,此计数器必须增加。 你能帮我理解这个问题吗? 我正在学习,所以结构可能是“初学者”版本。 谢谢。
解决方法
您可能可以将一些登录挂钩到 PageRouteBuilder,因为每个路由都从给定的页面经过(当然,它也必须在每个页面上)。
,正如@Randal Schwartz 评论的那样,我们可以利用 SharedProject
类的 onGenerateRoute
属性:
MaterialApp
通过定义自定义 runApp(MaterialApp(
home: BuilderPage(LoginArguments(false)),onGenerateRoute: generateRoute
));
函数:
generateRoute
然后,int counter = 0; // global variable outside of the classes
Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case 'home':
counter++;
return MaterialPageRoute(builder: (_) => HomeScreen());
case 'login':
counter++;
return MaterialPageRoute(builder: (_) => LoginScreen());
case 'register':
counter++;
return MaterialPageRoute(builder: (_) => RegisterScreen());
}
}
可以通过加载它们的状态来显示 counter
:
Widget
注意:这个解决方案不是最优的。请务必考虑使用更高级的状态管理架构,例如 class HomeScreen extends StatefulWidget {
const HomeScreen({ Key key }) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _counter;
@override
void initState() {
super.initState();
setState(() => _counter = counter);
}
void _increaseCounter() {
counter++;
setState(() => _counter++);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(child: Text(_counter.toString())),body: SafeArea(
child: Center(child:
GestureDetector(
onTap: () { _increaseCounter(); },child: Text('test'),),);
}
}
,以更好地管理应用中不同 BLoC
之间的数据同步。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。