Flutter-底部导航栏更改页面,但未选择图标

时间:2020-10-01 00:19:53

标签: android ios flutter dart

基本上,我有一个带有for filename in os.listdir(path): if filename.endswith(".docx"): file = "C:\\Users\\files\\" + filename print(file) doc = Document(file) for para in doc.paragraphs: text = para.text if len(re_highlight.findall(text)) > 0: matches = re_highlight.finditer(text) para.text = '' p3 = 0 for match in matches: p1 = p3 p2, p3 = match.span() para.add_run(text[p1:p2]) run = para.add_run(text[p2:p3]) run.font.highlight_color = WD_COLOR_INDEX.YELLOW para.add_run(text[p3:]) doc.save(file) 的主窗口小部件,当屏幕改变时,我将其传递给新屏幕。然后,每个屏幕都有其自己的this._bottomNavigationBarScaffold

听起来不错,但不能正常工作。

当我单击以更改所选选项时,它会更改屏幕,但是所选图标保持不变。如果我打印AppBar,它将正常更改索引。我不希望发生的事情,因为当我声明this.currentIndex时,this._bottomNavigationBar属性的定义如下:currentIndex,因此,如果图标未更改,则变量也不会。

因此,我意识到我可能原谅了onTap上的currentIndex: this.currentIndex方法,但事实并非如此。

我只是不知道为什么会这样。我认为这可能与setState()“范围”有关?我将在下面保留我的代码以更好地说明这一点。

home.dart

setState

landing.dart

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'landing.dart';

const List<BottomNavigationBarItem> homeScreenNavbarItems = [
  BottomNavigationBarItem(
    icon: Icon(FontAwesomeIcons.home),
    title: Text(''),
  ),
  BottomNavigationBarItem(
    icon: Icon(Icons.search),
    title: Text(''),
  ),
  BottomNavigationBarItem(
    icon: Icon(Icons.bookmark),
    title: Text(''),
  ),
  BottomNavigationBarItem(
    icon: Icon(Icons.person),
    title: Text(''),
  ),
];

class Home extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _HomeState();
  }
}

class _HomeState extends State<Home> {
  int currentIndex = 1;
  BottomNavigationBar _bottomNavigationBar;
  List homeScreens;

  void onNavbarTapped(int index) {
    setState(() {
      this.currentIndex = index;
    });
  }

  @override
  void initState() {
    this._bottomNavigationBar = BottomNavigationBar(
      showSelectedLabels: false,
      showUnselectedLabels: false,
      selectedItemColor: Color(0xFF000000),
      unselectedItemColor: Color(0xFFb3b3b3),
      currentIndex: this.currentIndex,
      items: homeScreenNavbarItems,
      onTap: this.onNavbarTapped,
    );

    this.homeScreens = [
      LandingScreen(this._bottomNavigationBar),
      Scaffold(
        bottomNavigationBar: this._bottomNavigationBar,
      )
    ];
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print(this.currentIndex);
    return this.homeScreens.elementAt(this.currentIndex);
  }
}

import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; class LandingScreen extends StatefulWidget { final BottomNavigationBar _bottomNavigationBar; LandingScreen(this._bottomNavigationBar); @override State<StatefulWidget> createState() { return _LandingScreenState(); } } class _LandingScreenState extends State<LandingScreen> { @override Widget build(BuildContext context) { return DefaultTabController( length: 3, child: Scaffold( appBar: AppBar( title: Text('a'), bottom: TabBar( tabs: [ Tab(icon: Icon(Icons.directions_car)), Tab(icon: Icon(Icons.directions_transit)), Tab(icon: Icon(Icons.directions_bike)), ], ), ), body: TabBarView( children: [ Icon(Icons.directions_car), Icon(Icons.directions_transit), Icon(Icons.directions_bike), ], ), bottomNavigationBar: widget._bottomNavigationBar, ), ); } } 文件只是调用main.dart小部件,因此我没有将其放在此处。

编辑

我删除了initState方法的所有内容,然后将其放入Widget构建方法中,可以正常工作,但是我不知道为什么...

0 个答案:

没有答案