老师代码可以封装一下,你写得太乱了,看看我这个写法是不是好很多!

来源:6-5 StatefulWidget与基础组件【撑起Flutter的半边天】

iStream

2023-04-15

/**
 * main.dart
 */

import 'package:flutter/material.dart';

void main() => runApp(const Page());

class Page extends StatefulWidget{
  const Page({ Key ? key }) : super(key: key);
  @override
  DynmicPage createState() => DynmicPage();
}

/**
 * 创建app
 */
class DynmicPage extends State<Page>{
  int _currentIndex = 0;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.red,
        ),
        home: Scaffold(//页面框架
          appBar: AppBar(
            title: Text('页面框架学习'),
          ),
          bottomNavigationBar: _bottomBar(),
            body: _pageContents()
        ),
    );
  }

  
  /***
   * 底部的按钮组
   */
  BottomNavigationBar _bottomBar(){
    return BottomNavigationBar(//
      currentIndex: _currentIndex,
      onTap: (index){
        setState(() {
          _currentIndex = index;
        });
      },
      items: [
        BottomNavigationBarItem(
          label: "home",
          icon:Icon(Icons.home,color: Colors.grey),
          activeIcon: Icon(Icons.home,color: Colors.red),
        ),
        BottomNavigationBarItem(
          label: "list",
          icon:Icon(Icons.list,color: Colors.grey),
          activeIcon: Icon(Icons.list,color: Colors.red),
        ),
      ],
    );
  }

  /***
   * 页面内容
   */
  Container _pageContents(){
    return _currentIndex == 0
        ?
    Container(
      color: Colors.lightGreen,
      child: Center(child: Text("home",style: TextStyle(fontSize: 40),),),
    )
        :
    Container(
      color: Colors.teal,
      child:RefreshIndicator(child: ListView(
        children: [
          Text("list1",style: TextStyle(fontSize: 40),),
          Text("list2",style: TextStyle(fontSize: 40),),
          Text("list3",style: TextStyle(fontSize: 40),),
          Text("list4",style: TextStyle(fontSize: 40),)
        ],
      ), onRefresh: _handlRefrsh)
    );
  }

  Future<Null>_handlRefrsh() async{
    print('下啦刷新');
  }


}







写回答

1回答

CrazyCodeBoy

2023-04-17

嗯,后面课程代码中有封装。
另外对于一些没有参数的但会返回一个widget的方法可以这样封装更加简洁:
BottomNavigationBar get _bottomBar => BottomNavigationBar(...)
0
0

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

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

4788 学习 · 3270 问题

查看课程