我有一个应用程序,该应用程序在登录后会路由到“ mainapp”页面。该应用程序包含一个底部导航栏,该导航栏显示相应的已按下图标的页面。我想将Map<String, dynamic>
类型的数据传递到这些页面,但是遇到了麻烦。此映射是通过一个函数生成的,该函数从服务器获取数据,将其保存到共享首选项,然后加载共享首选项并将其作为映射返回(所有都包含在getData()
中)。我想传递此地图,这样就不必每次都加载共享的首选项,但是也会在需要时与共享的首选项一起更新此地图(可能在其中一个页面上执行操作)。
class MainApp extends StatefulWidget {
@override
_MainAppState createState() => _MainAppState();
}
class _MainAppState extends State<MainApp> {
Map<String, dynamic> Data;
StartFunc() async {
Data = await getData();
setState(() {});
}
@override
void initState() {
StartFunc();
super.initState();
}
var _pages = [
PageOne(Data:Data),
PageTwo(),
PageThree(),
PageFour(),
PageFive(),
];
int _currentIndex = 0;
onTabTapped(int index) {
setState(() {
_currentIndex = index;
});
}
@override
Widget build(BuildContext context) {
return _currentIndex == 2
? PageTwo()
: Scaffold(
body: _pages[_currentIndex],
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.library_books), title: Text('')),
BottomNavigationBarItem(
icon: Icon(Icons.notifications), title: Text('')),
BottomNavigationBarItem(
icon: Icon(Icons.add_circle_outline), title: Text('')),
BottomNavigationBarItem(
icon: Icon(Icons.mail), title: Text('')),
BottomNavigationBarItem(
icon: Icon(Icons.person), title: Text('')),
],
onTap: onTabTapped,
currentIndex: _currentIndex,
),
);
}
}
我收到一条错误消息,说初始化器中只能访问静态成员。我想知道继承的窗口小部件或其他设计模式(例如范围模型和BLoC)是否可以帮助您,但不确定这是否是正确的方法。我也不确定在这种情况下如何开始实施它们。
答案 0 :(得分:5)
您的代码中有两个问题:
在 holder.approveCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
Logger.infoLog("Checked Position ==> "+position+" boolean ==> "+b);
}
});
的正文中使用异步方法
有关详情,请参见here
在初始化程序中使用实例数据 有关详情,请参见here
接下来的工作是对您的代码进行非常基本的重写,而进行的校正最少。
数据映射是从模拟的后端加载的,在initState()
内部进行更新,并在onTap回调的PageOne
中打印到控制台。
请注意,我已将实例变量PageTwo
更改为Data
以符合Effective Dart准则。
请注意,要点不能正确地解决具有共享首选项的后端服务的同步:这可能是最终产品中必须解决的问题。
我刚刚评论了使您的代码有效的必要条件: 如果系统的复杂性以及与外部API的关系开始增长,那么可能值得考虑使用Bloc架构。
data