App首页框架搭建--项目实践

33 篇文章 2 订阅

1、项目目录结构

2、

代码:

main.dart

import 'package:flutter/material.dart';

import 'navigator/tab_navigator.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TabNavigator(),
    );
  }
}

 

tab_navigator.dart

import 'package:flutter/material.dart';
import 'package:flutter_trip/pages/home_page.dart';
import 'package:flutter_trip/pages/my_page.dart';
import 'package:flutter_trip/pages/search_page.dart';
import 'package:flutter_trip/pages/travel_page.dart';

class TabNavigator extends StatefulWidget{
  //_TabNavigatorState定义好后,就可以修改该函数的返回值进行返回
@override
_TabNavigatorState  createState()=>_TabNavigatorState();

}

//在dart里面,如果要定义一个内部类,不能被外部访问的话,就可以以下划线开头
class _TabNavigatorState extends State<TabNavigator>{
  final _defaultColor = Colors.grey;
  final _activeColor = Colors.blue;
  int _curentIndex =0;

  final PageController _controller=PageController(
    //初始状态下打开第0个tab
    initialPage: 0,
  );
  @override
  Widget build(BuildContext context) {
    //在build()方法里面,可以将Scaffold()作为整个页面的根节点
    return Scaffold(
      //body中定义一个PageView
      body: PageView(
        //pageview中使用一个controller
        controller: _controller,
        //要显示的页面
        //需要显示“首页”、“搜索”、“旅拍”、“我的”
        children: <Widget>[
          HomePage(),
          SearchPage(),
          TravelPage(),
          MyPage()
        ],
      ),

      bottomNavigationBar: BottomNavigationBar(
        //默认当前的界面
          currentIndex: _curentIndex,
          type: BottomNavigationBarType.fixed,      //设置图标和文字一起变化
          onTap: (index){
            //跳到选中的界面
            _controller.jumpToPage(index);
            setState(() {
              _curentIndex=index;
            });
          },
          items: [
        BottomNavigationBarItem(
            icon: Icon(Icons.home,color: _defaultColor),
            activeIcon: Icon(Icons.home,color: _activeColor),
            title:Text('首页',style: TextStyle(color: _curentIndex!=0?_defaultColor:_activeColor),)
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.search,color: _defaultColor),
            activeIcon: Icon(Icons.search,color: _activeColor),
            title:Text('搜索',style: TextStyle(color: _curentIndex!=1?_defaultColor:_activeColor),)
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.camera_alt,color: _defaultColor),
            activeIcon: Icon(Icons.camera_alt,color: _activeColor),
            title:Text('旅拍',style: TextStyle(color: _curentIndex!=2?_defaultColor:_activeColor),)
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.account_circle,color: _defaultColor),
            activeIcon: Icon(Icons.account_circle,color: _activeColor),
            title:Text('我的',style: TextStyle(color: _curentIndex!=3?_defaultColor:_activeColor),)
        ),
      ]),
    );
  }

}

 

home_page.dart

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget{
  //_TabNavigatorState定义好后,就可以修改该函数的返回值进行返回
@override
_HomePageState  createState()=>_HomePageState();

}

//在dart里面,如果要定义一个内部类,不能被外部访问的话,就可以以下划线开头
class _HomePageState extends State<HomePage>{

  @override
  Widget build(BuildContext context) {
    //在build()方法里面,可以将Scaffold()作为整个页面的根节点
    return Scaffold(
      body: Center(
        child: Text('首页'),
      )
    );
  }

}

 

my_page.dart

import 'package:flutter/material.dart';

class MyPage extends StatefulWidget{
  //_TabNavigatorState定义好后,就可以修改该函数的返回值进行返回
@override
_MyPageState  createState()=>_MyPageState();

}

//在dart里面,如果要定义一个内部类,不能被外部访问的话,就可以以下划线开头
class _MyPageState extends State<MyPage>{

  @override
  Widget build(BuildContext context) {
    //在build()方法里面,可以将Scaffold()作为整个页面的根节点
    return Scaffold(
      body: Center(
        child: Text('我的'),
      )
    );
  }

}

 

search_page.dart

import 'package:flutter/material.dart';

class SearchPage extends StatefulWidget{
  //_TabNavigatorState定义好后,就可以修改该函数的返回值进行返回
@override
_SearchPageState  createState()=>_SearchPageState();

}

//在dart里面,如果要定义一个内部类,不能被外部访问的话,就可以以下划线开头
class _SearchPageState extends State<SearchPage>{

  @override
  Widget build(BuildContext context) {
    //在build()方法里面,可以将Scaffold()作为整个页面的根节点
    return Scaffold(
      body: Center(
        child: Text('搜索'),
      )
    );
  }

}

 

travel_page.dart

import 'package:flutter/material.dart';

class TravelPage extends StatefulWidget{
  //_TabNavigatorState定义好后,就可以修改该函数的返回值进行返回
@override
_TravelPageState  createState()=>_TravelPageState();

}

//在dart里面,如果要定义一个内部类,不能被外部访问的话,就可以以下划线开头
class _TravelPageState extends State<TravelPage>{

  @override
  Widget build(BuildContext context) {
    //在build()方法里面,可以将Scaffold()作为整个页面的根节点
    return Scaffold(
      body: Center(
        child: Text('旅拍'),
      )
    );
  }

}

3、

运行结果:

点击“首页”

 

 

点击“搜索"

 

点击“旅拍”

 

点击"我的"

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值