您的代码中有两个问题:
在体内使用异步方法
initState()
见这里了解详细信息在初始化程序中使用实例数据,请参见此处以获取详细信息
接下来的工作是对您的代码进行非常基本的重写,并进行了最少的更正。
数据映射从模拟的后端加载,在内部更新
PageOne并在
PageTwoonTap回调中打印到控制台。
请注意,我已经改变了实例变量
Data,以
data使其符合有效飞镖准则。
请注意,要点无法正确地解决具有共享首选项的后端服务的同步:这可能是最终产品中必须考虑的问题。
我只是评论了使代码正常工作的必要条件:如果系统的复杂性以及与外部API的关系开始增长,那么可能值得考虑使用Bloc架构。
import 'package:flutter/material.dart';void main() => runApp(new MainApp());// Mock up of an async backend serviceFuture<Map<String, dynamic>> getData() async { return Future.delayed(Duration(seconds: 1), () => {'prop1': 'value1'});}class PageOne extends StatelessWidget { final Map<String, dynamic> data; PageOne({Key key, this.data}) : super(key: key); @override Widget build(BuildContext context) { return Center( child: RaisedButton( child: const Text('update preferences'), onPressed: () { data['prop2'] = 'value2'; }, ), ); }}class PageTwo extends StatelessWidget { final Map<String, dynamic> data; PageTwo({Key key, this.data}) : super(key: key); @override Widget build(BuildContext context) { return Center( child: RaisedButton( child: const Text('Got It!'), onPressed: () { print("data is now: [$data]"); }, ), ); }}class MainApp extends StatefulWidget { @override _MainAppState createState() => _MainAppState();}class _MainAppState extends State<MainApp> { //Map<String, dynamic> Data; Map<String, dynamic> data; @override void initState() { //StartFunc(); super.initState(); getData().then((values) { setState(() { data = values; }); }); } Widget getPage(int index) { if (index == 0) { return PageOne(data:data); } if (index == 1) { return PageTwo(data:data); } // A fallback, in this case just PageOne return PageOne(); } int _currentIndex = 0; onTabTapped(int index) { setState(() { _currentIndex = index; }); } @override Widget build(BuildContext context) { return MaterialApp( title: 'My App', home: Scaffold( appBar: AppBar(title: Text("My App Bar")), body: getPage(_currentIndex), bottomNavigationBar: BottomNavigationBar( type: BottomNavigationBarType.fixed, items: [ BottomNavigationBarItem( icon: Icon(Icons.first_page), title: Text('')), BottomNavigationBarItem( icon: Icon(Icons.last_page), title: Text('')), ], onTap: onTabTapped, currentIndex: _currentIndex, ), )); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)