Newer
Older
flutterBaseApp / lib / ui / pages / main_page.dart
StephanieGitHub on 9 Feb 2021 3 KB first commit
import 'package:base_app/blocs/list_bloc.dart';
import 'package:base_app/blocs/bloc_index.dart';
import 'package:base_app/res/index.dart';
import 'package:base_app/ui/pages/demo/list_page.dart';
import 'package:base_app/ui/pages/demo/map_page.dart';
import 'package:base_app/ui/pages/demo/demo_tab_page.dart';
import 'package:base_app/ui/pages/main_left_page.dart';
import 'package:base_app/ui/widgets/common/button/large_button_widget.dart';
import 'package:base_app/utils/util_index.dart';
import 'package:fluintl/fluintl.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';

import 'demo/simple_page.dart';

// 页面
class _Page {
  final String labelId;
  _Page(this.labelId);
}

final List<_Page> _allPages = <_Page>[
  _Page(Ids.titleHome),
  _Page(Ids.titleRepos),
  _Page(Ids.titleEvents),
  _Page(Ids.titleList),
];

/// 主菜单页
class MainPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new MainPageState();
  }
}

class MainPageState extends State<MainPage> {
  DateTime _lastPressedAt; //上次点击时间
  int _currentIndex = 0;
  List<Widget> _pages;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // 全局
    return Scaffold(
        appBar: AppBar(
          title: Text(
              IntlUtil.getString(context, _allPages[_currentIndex].labelId)),
          centerTitle: true,
        ),
        // 抽屉
        drawer: Drawer(child: MainLeftPage()),
        // 底部导航栏
        bottomNavigationBar: BottomNavigationBar(
            currentIndex: _currentIndex, //当前tab
            selectedItemColor: Theme.of(context).primaryColor, // 选中后的颜色
            type: BottomNavigationBarType.fixed, // 类别fixed和shift
            unselectedItemColor: Colours.gray_66, //未选中颜色
            onTap: (int index) {
              setState(() {
                _currentIndex = index;
              });
            },
            items: [
              BottomNavigationBarItem(
                  title: new Text("simple"), icon: new Icon(Icons.home)),
              BottomNavigationBarItem(
                  title: new Text("tab"), icon: new Icon(Icons.tab)),
              BottomNavigationBarItem(
                  title: new Text("map"), icon: new Icon(Icons.map)),
              BottomNavigationBarItem(
                  title: new Text("list"), icon: new Icon(Icons.list)),
            ]),
        // 监控返回按钮
        body: new WillPopScope(
            child: buildTabView(context, _currentIndex),
            onWillPop: () async {
              if (_lastPressedAt == null ||
                  DateTime.now().difference(_lastPressedAt) >
                      Duration(seconds: 2)) {
                showToast("再按一次退出程序");
                //两次点击间隔超过1秒则重新计时
                _lastPressedAt = DateTime.now();
                return false;
              }
              return true;
            }));
  }

  Widget buildTabView(BuildContext context, index) {
    _Page page = _allPages[index];
    String labelId = page.labelId;
    switch (labelId) {
      case Ids.titleHome:
        return SimplePage(labelId: labelId);
        break;
      case Ids.titleRepos:
        return DemoTabPage(labelId: labelId);
        break;
      case Ids.titleEvents:
        return MapPage(labelId: labelId);
        break;
      case Ids.titleList:
        // new Bloc
        return new BlocProvider<ListBloc>(
            child: ListPage(labelId: labelId), bloc: new ListBloc());
        break;
      default:
        return Container();
        break;
    }
  }
}