【flutter】複雑な構造のウィジェット

class _MyHomePageState extends State<MyHomePage> {

  static var _message = "ok.";
  static var _stars = '★★★★★';
  static var _star = 0;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('App Name'),
        leading: BackButton(
          color: Colors.white,
        ),


      actions: <Widget>[
        IconButton(
          icon: Icon(Icons.android),
          tooltip: 'add star...',
          onPressed: iconPressedA,
        ),
        IconButton(
          icon: Icon(Icons.favorite),
          tooltip: 'subtract star...',
          onPressed: iconPressedB,
        )
      ],
      bottom: PreferredSize(
        preferredSize: const Size.fromHeight(30.0),
        child: Center(
          child: Text(_stars,
          style: TextStyle(
            fontSize: 22.0,
            color:Colors.white,
          ),),
        ),
      ),
    ),
    body:
      new Center(
        child: Text(
          _message,
          style: const TextStyle(
            fontSize: 28.0,
          ),
        )

      ),

    );
  }

  void iconPressedA(){
    _message = 'tap "Android".';
    _star++;
    update();
  }

  void iconPressedB(){
    _message = 'tap "favorite".';
    _star--;
    update();
  }

  void update(){
    _star = _star < 0 ? 0 : _star > 5 ? 5 : _star;
    setState((){
      _stars = '★★★★★☆☆☆☆☆'.substring(5 - _star, 5 - _star + 5);
      _message = _message + '[$_star]';
    });
  }
}

BottomNavigationBar

class _MyHomePageState extends State<MyHomePage> {
  static var _message = "ok.";
  static var _index = 0;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('App Name'),
      ),
      body:
      new Center(
        child: Text(
          _message,
          style: const TextStyle(
            fontSize: 28.0,
          ),
        ),
      ),
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: _index,
        backgroundColor: Colors.lightBlueAccent,
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            label: 'Android',
            icon: Icon(Icons.android, color: Colors.black, size: 50),
          ),
          BottomNavigationBarItem(
            label: 'Favorite',
            icon: Icon(Icons.android, color: Colors.red, size: 50),
          ),
          BottomNavigationBarItem(
            label: 'Home',
            icon: Icon(Icons.android, color: Colors.white, size: 50),
          ),
        ],
        onTap: tapBottomIcon,
      ),
    );
  }

  void tapBottomIcon(int value) {
    var items = ['Android', 'Heart', 'Home'];
    setState((){
      _index = value;
      _message = 'you tapped: "' + items[_index] + '".';
    });
  }
}

List View