BottomNavigationBar使用返回值和直接在里边写效率上有区别么?

来源:8-3 APP首页框架搭建-项目实践【搭了个框架】

_呵呵哒_

2019-05-10

在items我是使用返回值的形式,老师您看下代码,和老师直接写在里边的执行效率有区别么?

import 'package:flutter/material.dart';
import 'package:flutter_demo/fragment/HomeFragment.dart';
import 'package:flutter_demo/fragment/MyFragment.dart';
import 'package:flutter_demo/fragment/SearchFragment.dart';
import 'package:flutter_demo/fragment/ShootFragment.dart';

class MainActivity extends StatefulWidget {
  @override
  _MainActivityState createState() => _MainActivityState();
}

class _MainActivityState extends State<MainActivity> {
  //定义显示的Page
  final List<Widget> _pages = [
    HomeFragment(),
    SearchFragment(),
    ShootFragment(),
    MyFragment()
  ];

  //定义显示的导航文本
  final List<String> _titles = ['首页', '搜索', '旅拍', '我的'];

  //定义显示的图标
  final List<IconData> _icons = [
    Icons.home,
    Icons.search,
    Icons.camera_alt,
    Icons.person
  ];

  //定义默认颜色
  final Color _defaultColor = Colors.grey; //默认颜色
  final Color _checkColor = Colors.blue; //选中颜色

  //定义默认显示页面
  int _currentPage = 0;

  //定义PageView控制器
  final PageController _controller = PageController(initialPage: 0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        children: _pages,
        controller: _controller,
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: _navItemLists(),
        type: BottomNavigationBarType.fixed,
        onTap: (index) {
          _controller.jumpToPage(index);
          setState(() {
            _currentPage = index;
          });
        },
      ),
    );
  }

  List<BottomNavigationBarItem> _navItemLists() {

    List<BottomNavigationBarItem> _items = [];

    _titles.asMap().forEach((i, v) {
      _items.add(
        BottomNavigationBarItem(
            title: Text(
              v,
              style: TextStyle(
                  color: _currentPage != i ? _defaultColor : _checkColor),
            ),
            icon: Icon(
              _icons[i],
              color: _currentPage != i ? _defaultColor : _checkColor,
            ),
            activeIcon: Icon(
              _icons[i],
              color: _currentPage != i ? _defaultColor : _checkColor,
            )),
      );
    });
    return _items;
  }
}

写回答

2回答

CrazyCodeBoy

2019-05-12

有区别,这样写每次渲染都会执行一次_titles.asMap() 数组遍历,但考虑到数组长度较小,性能影响可忽略不计

0
1
_呵呵哒_
非常感谢!
2019-05-15
共1条回复

_呵呵哒_

提问者

2019-05-10

每次setState后都会执行一次 _navItemLists方法,然后循环,这样写好么?

0
0

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程