首页 > 解决方案 > Flutter - 在底部导航栏中发送参数

问题描述

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

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

导航条码为:

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

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

只能在初始化程序中访问静态成员。

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

标签: flutternavigationbar

解决方案


_NavigationState对象未构造,因此您无法访问“小部件”getter,因为它没有初始化,也不是静态属性。

改变

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

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

然后在您的构建更改中

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

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

推荐阅读