如何使用scope_model和类小部件动态设置Flutter BottomNavigationBar

时间:2019-04-20 02:29:08

标签: flutter

我有一个包含多个路线的应用程序!我想避免在所有屏幕中使用相同的代码。

为此,我创建了一个名为template_widget.dart的文件。

在其中,我将BottomNavigationBar移至如下位置:

class Template {
static Widget buildBottomAppBar(model, _selectedIndex, context) {
    return BottomNavigationBar(
      type: BottomNavigationBarType.fixed,
      items: <BottomNavigationBarItem>[
        BottomNavigationBarItem(
          icon: Icon(Icons.home),
          title: Text('Home'),
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.business), title: Text('Business')),
        BottomNavigationBarItem(
            icon: Icon(Icons.school), title: Text('School')),
        BottomNavigationBarItem(
            icon: Icon(Icons.account_box), title: Text('Account')),
      ],
      currentIndex: _selectedIndex,
      fixedColor: Theme.of(context).primaryColor,
      onTap: (int index) => { 
       model.setSelectedIndex(index)
        },
    );
  }
}

现在,我通过以下方式将其添加到屏幕上:

Widget _buildPageContent(AppModel model) {
    return Scaffold(
      appBar: appBar(model),
      bottomNavigationBar:
          Template.buildBottomAppBar(model, _selectedIndex, context),
      body: _buildSendForm(model),
      drawer: Template.drawer(model, context),
    );
  }

selectedIndex在scope_model的所有路由中共享。

我遇到的问题是应用程序的setState(),当bottomNav项为Template classscope_model时,我不知道该怎么做点击。

  onItemTapped(index, context) {
    print('tab');
    setState(() {
      switch (index) {
        case 0:
          Navigator.pushNamed(context, '/home');
          break;
        case 1:
          Navigator.pushNamed(context, '/business');
          break;
        case 2:
          Navigator.pushNamed(context, '/school');
          break;
        case 3:
          Navigator.pushNamed(context, '/account');
          break;
      }
    });
  }

如何从上述结构中设置以下状态,这甚至是解决此问题的正确方法?

0 个答案:

没有答案