Flutter-在底部导航栏中发送参数

时间:2019-05-10 08:13:28

标签: flutter navigationbar

我有两个不同的页面。其中之一是一种形式,另一种是元素列表。如果您向左滑动元素之一,则可以进行编辑。我需要将元素数据(从列表中)发送到第一页(表单)

应用程序启动时,如果来自元素列表的数据不为空,则该数据为空。

导航条形码为:

import 'package:flutter/material.dart';
import 'package:datameter/screens/configuration/form/partials/home_page.dart';
import 'package:datameter/screens/configuration/list/datameters.dart';
import 'package:datameter/locations/locations.dart';

class Navigation extends StatefulWidget {

 final item;

  Navigation(
      {Key key,
      this.item})
      : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return _NavigationState();
  }
}

class _NavigationState extends State<Navigation> {

  int currentIndex = 0;
  List<Widget> children = [
    HomePageScreen(datameter: widget.item), //ERRROR HERE
    DatametersPageScreen(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: children[currentIndex],
      bottomNavigationBar: new Theme(
          data: Theme.of(context).copyWith(
            primaryColor: Colors.blue[700],
            textTheme: Theme.of(context)
                .textTheme
                .copyWith(caption: new TextStyle(color: Colors.black)),
          ),
          child: BottomNavigationBar(
            onTap: onTabTapped,
            currentIndex: currentIndex,
            items: [
              BottomNavigationBarItem(
                icon: Icon(Icons.add),
                title: Text(DemoLocalizations.of(context).text('new-device')),
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.list),
                title: Text(DemoLocalizations.of(context).text('show-all')),
              ),
            ],
          )),
    );
  }

  void onTabTapped(int index) {
    setState(() {
      currentIndex = index;
    });
  }
}

当我尝试将元素列表(使用导航底部栏)中的参数发送到表单时,返回

  

仅静态成员可以加入初始化程序。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

_NavigationState 未构造对象,因此您不能访问“ widget” getter,因为它不是静态属性。

更改

 List<Widget> children = [
    HomePageScreen(datameter: widget.item), //ERRROR HERE
    DatametersPageScreen(),
  ];

 List<Widget> _children() => [
    HomePageScreen(datameter: widget.item),
    DatametersPageScreen(),
  ];

然后在您进行更改

@override
Widget build(BuildContext context)
{
    List<Widget> children = _children( );

    return Scaffold
    (
        //code
        body: children[currentIndex],
        //code
    )
}