【问题标题】:Flutter - Send params in Bottom Navigation BarFlutter - 在底部导航栏中发送参数
【发布时间】:2019-05-10 08:13:27
【问题描述】:

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

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

导航条码为:

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

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

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

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

【问题讨论】:

    标签: flutter navigationbar


    【解决方案1】:

    _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)
    {
        final List<Widget> children = _children();
    
        return Scaffold
        (
            //code
            body: children[currentIndex],
            //code
        );
    }
    

    【讨论】:

    • @Anjumohan 很高兴
    • 简单而神奇。我们可以使用哪些其他方法来解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2020-07-30
    • 2021-06-27
    相关资源
    最近更新 更多