带有底部导航栏的页面之间的数据传递

带有底部导航栏的页面之间的数据传递,第1张

带有底部导航栏的页面之间的数据传递

您的代码中有两个问题:

  1. 在体内使用异步方法

    initState()
    见这里了解详细信息

  2. 在初始化程序中使用实例数据,请参见此处以获取详细信息

接下来的工作是对您的代码进行非常基本的重写,并进行了最少的更正。

数据映射从模拟的后端加载,在内部更新

PageOne
并在
PageTwo
onTap回调中打印到控制台。

请注意,我已经改变了实例变量

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,          ),        ));  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4989378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存