我想在使用BottomAppBar时通过不同的页面传递动态数据。我目前在页面/小部件之间切换我存储它们像这样:
@override void initState(){ 超….
你想用吗? _pageOptions 在同一个班 ?如果这是应该解决你的问题。
_pageOptions
var _pageOptions; // declare a variable inside your class/outside of your initState to reach it from anywhere inside in your class @override void initState() { super.initState(); _pageOptions = [ SwipeScreen(currentUserId: currentUserId), Requests(currentUserId: currentUserId), Messages(currentUserId: currentUserId), Settings(), ]; }
这不是故意,只是诚实,所以请不要冒犯,但从你需要重新开始的事情的声音,一些基本的教程,如何颤动的工作和如何开发的东西。我建议你做几件事 教程 &安培; codelabs 从头到尾在颤动的网站上(没有查看最终的代码直到你),然后看到你做了不同的事情。甚至可能是 开始使用Dart文档 ...
对您的问题最简单的答案就是简单地使_pageOptions成为您的类的成员变量,因为这将允许您从您需要的任何其他地方访问它。但是,由于您遇到的问题只是“能够在我的初始化程序中传递静态成员”,这可能意味着您没有在正确的位置初始化事物。
在使用颤振进行开发时,请记住以下几点:
#3的解决方案是使用a 颤动的导航 并定义您的页面 MaterialApp(routes: ...) 要么 MaterialApp(onGenerateRoute: ...) 。因此,您要为SwipeScreen,请求,消息和设置设置路由。你用的 Navigator.push 要么 Navigator.pushNamed , 要么 Navigator.pop 在他们之间移动。
MaterialApp(routes: ...)
MaterialApp(onGenerateRoute: ...)
Navigator.push
Navigator.pushNamed
Navigator.pop
因此,您不会在任何地方复制和粘贴底部导航栏,将其拆分为自己的小部件,即 MyBottomNavigationBar extends StatelessWidget 。然后在每个页面中你都有一个Scaffold(body:...,bottomNavigationBar:MyBottomNavigationBar())。如果你的脚手架变得非常复杂,你甚至可以将它移动到它自己的小部件。
MyBottomNavigationBar extends StatelessWidget
哦,我刚刚读到了你问题的重要部分: I want to pass dynamic data through different pages 。正如我所描述的那样使用导航器会稍微改变一下,因为您不希望将其传递到每个构建层。
I want to pass dynamic data through different pages
有各种方法来解决这个问题 - 最基本的是使用InheritedWidget,但是因为它需要很多样板才能使它工作我建议使用 ScopedModel 。这样,你只需要创建一个继承自Model(即UserModel)的类,然后在选择/登录用户时更改模型中的信息并通知监听器(即userId)。如下所示:
class UserModel extends Model { String _userId; String get userId => _userId; void setUser(String userId) { _userId = userId; notifyListeners(); } static CounterModel of(BuildContext context, {bool rebuildOnChange = false}) => ScopedModel.of<CounterModel>(context, rebuildOnChange = rebuildOnChange); }
你需要把它放在你的小部件树中的某个地方(可能在MaterialApp之上或者在 MaterialApp(builder: ...) )。然后,您可以为该模型添加名称,配置文件,颜色等,并在您的应用中的任何位置使用所有这些。
MaterialApp(builder: ...)