MainActivity.dart 4.5 KB
Newer Older
李增强's avatar
李增强 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
/*
 * Author: Jpeng
 * Email: peng8350@gmail.com
 * Time: 2019/5/3 下午6:13
 */

import 'package:flutter/material.dart';
import 'package:residemenu/residemenu.dart';
import 'example/ExamplePage.dart';
import 'test/TestPage.dart';
import 'indicator/IndicatorPage.dart';

class MainActivity extends StatefulWidget {
  final String title;

  MainActivity({this.title});

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _MainActivityState();
  }
}

class _MainActivityState extends State<MainActivity>
    with TickerProviderStateMixin {
  List<Widget> views;
  MenuController _menuController;
  TabController _tabController;
  int _tabIndex = 1;
  PageController _pageController;

  Widget buildItem(String msg, Widget icon, Function voidCallBack) {
    return Material(
      color: Colors.transparent,
      child: InkWell(
        child: ResideMenuItem(
          title: msg,
          icon: icon,
          right: const Icon(Icons.arrow_forward, color: Colors.grey),
        ),
        onTap: voidCallBack,
      ),
    );
  }

  @override
  void initState() {
    // TODO: implement initState

    super.initState();
    _tabController = TabController(length: 6, vsync: this);
    _menuController =
        MenuController(vsync: this, direction: ScrollDirection.LEFT);
    _pageController = PageController(initialPage: 1);
    views = [
      IndicatorPage(title: "指示器界面"),
      ExamplePage(),
      TestPage(title: "测试界面"),
    ];
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return ResideMenu.scaffold(
      controller: _menuController,
      enable3dRotate: true,
      child: Scaffold(
        appBar: AppBar(
          // Here we take the value from the MyHomePage object that was created by
          // the App.build method, and use it to set our appbar title.
          title: Text(_tabIndex == 0
              ? "指示器界面"
              : _tabIndex == 1
                  ? "例子界面"
                  : _tabIndex == 2
                      ? "测试界面"
                      : _tabIndex == 3
                          ? "样例界面"
                          : "App界面"),
          leading: GestureDetector(
            child: Icon(Icons.menu),
            onTap: () {
              _menuController.openMenu(true);
            },
          ),
          backgroundColor: Colors.greenAccent,
          bottom: _tabIndex == 3
              ? TabBar(
                  isScrollable: true,
                  tabs: [
                    Tab(child: Text("超大数据量性能测试")),
                    Tab(child: Text("SliverAppbar+Sliverheader")),
                    Tab(child: Text("嵌套滚动视图")),
                    Tab(child: Text("动态变化指示器+Navigator")),
                    Tab(child: Text("主动刷新")),
                    Tab(child: Text("四个方向不同风格测试绘制")),
                  ],
                  controller: _tabController,
                )
              : null,
        ),
        body: PageView(
          controller: _pageController,
          children: views,
          physics: NeverScrollableScrollPhysics(),
        ),
      ),
      decoration: BoxDecoration(color: Colors.purple),
      leftScaffold: MenuScaffold(
        header: ConstrainedBox(
          constraints: BoxConstraints(maxHeight: 80.0, maxWidth: 80.0),
          child: CircleAvatar(
            backgroundImage: NetworkImage(
                'https://avatars1.githubusercontent.com/u/19425362?s=400&u=1a30f9fdf71cc9a51e20729b2fa1410c710d0f2f&v=4'),
            radius: 40.0,
          ),
        ),
        children: <Widget>[
          buildItem("各种指示器", Icon(Icons.apps, size: 18, color: Colors.grey),
              () {
            setState(() {
              _tabIndex = 0;
            });
            _pageController.jumpToPage(0);
            _menuController.closeMenu();
          }),
          buildItem(
              "例子", Icon(Icons.insert_emoticon, size: 18, color: Colors.grey),
              () {
            setState(() {
              _tabIndex = 1;
            });
            _pageController.jumpToPage(1);
            _menuController.closeMenu();
          }),
          buildItem("测试",
              Icon(Icons.airplanemode_active, size: 18, color: Colors.grey),
              () {
            setState(() {
              _tabIndex = 2;
            });
            _menuController.closeMenu();
            _pageController.jumpToPage(2);
          }),
        ],
      ),
    );
  }
}