加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flutter进阶—质感设计之卡片

发布时间:2020-12-14 14:54:47 所属栏目:百科 来源:网络整理
导读:Card控件是质感设计中的卡片控件,作为详细信息的入口。卡片有圆角和阴影,卡片是用于表示一些相关信息的面板,例如相册,地理位置,餐食,联系细节等。 import 'package:flutter/material.dart' ;void main() { runApp( new MyApp());}const String _explan

Card控件是质感设计中的卡片控件,作为详细信息的入口。卡片有圆角和阴影,卡片是用于表示一些相关信息的面板,例如相册,地理位置,餐食,联系细节等。

import 'package:flutter/material.dart';
void main() {
  runApp(new MyApp());
}
const String _explanatoryText =
    "当Scaffold的浮动操作按钮改变时,新按钮消失并变成视图。"
    "在这个Demo中,更改选项卡会导致应用程序与浮动操作按钮重建,"
    "Scaffold通过键值与其他区分。";
/* 页面类 成员变量:标签名称、颜色、图标 成员函数: 获取卡片标签颜色 获取浮动按钮定义是否为空 获取浮动按钮的颜色 获取浮动按钮的图标 获取浮动按钮的键值 */
class _Page {
  _Page({
    this.label,this.colors,this.icon,});
  final String label;
  final Map<int,Color> colors;
  final IconData icon;
  Color get labelColor => colors != null ? colors[300] : Colors.grey[300];
  bool get fabDefined => colors != null && icon != null;
  Color get fabColor => colors[400];
  Icon get fabIcon => new Icon(icon);
  Key get fabKey => new ValueKey<Color>(fabColor);
}
//所有页面类的列表
final List<_Page> _allPages = <_Page>[
  new _Page(label: '蓝色',colors: Colors.indigo,icon: Icons.add),new _Page(label: '绿色',colors: Colors.green,icon: Icons.create),new _Page(label: '空白'),new _Page(label: '蓝绿色',colors: Colors.teal,new _Page(label: '红色',colors: Colors.red,];
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',theme: new ThemeData(
        primarySwatch: Colors.blue,),home: new MyHomePage(title: 'Flutter Demo Home Page'),);
  }
}
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key,this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  //应用程序的唯一键值,Scaffold的状态
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  TabController _controller;
  //局部变量,选择页面
  _Page _selectedPage;
  @override
  void initState() {
    super.initState();
    _controller = new TabController(vsync: this,length: _allPages.length);
    //addListener:每次动画的值更改时调用侦听器
    _controller.addListener(_handleTabSelection);
    _selectedPage = _allPages[0];
  }
  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }
  //处理选项卡选择的函数
  void _handleTabSelection() {
    setState(() {
      _selectedPage = _allPages[_controller.index];
    });
  }
  //显示说明文本的函数
  void _showExplanatoryText() {
    /* currentState:当前树中具有此键的控件的状态 showBottomSheet:显示持久的质感设计底部板块 */
    _scaffoldKey.currentState.showBottomSheet<Null>((BuildContext context) {
      return new Container(
        decoration: new BoxDecoration(
          //容器顶部的边界颜色为当前主题颜色
          border: new Border(top: new BorderSide(color: Theme.of(context).dividerColor))
        ),child: new Padding(
          padding: const EdgeInsets.all(32.0),child: new Text(_explanatoryText)
        )
      );
    });
  }
  Widget buildTabView(_Page page) {
    //Builder:将其构建委托给回调的控件
    return new Builder(
      //builder:调用获取控件
      builder: (BuildContext context) {
        return new Container(
          key: new ValueKey<String>(page.label),padding: const EdgeInsets.fromLTRB(48.0,48.0,96.0),//创建质感设计卡片
          child: new Card(
            child: new Center(
              child: new Text(page.label,style: new TextStyle(
                  color: page.labelColor,fontSize: 32.0,)
              )
            )
          )
        );
      }
    );
  }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      key: _scaffoldKey,appBar: new AppBar(
        title: new Text(config.title),//bottom:显示在应用栏底部的控件
        bottom: new TabBar(
          controller: _controller,tabs: _allPages.map((_Page page) {
            return new Tab(
              text: page.label,);
          }).toList()
        )
      ),floatingActionButton: !_selectedPage.fabDefined ? null : new FloatingActionButton(
        key: _selectedPage.fabKey,tooltip: '显示说明',backgroundColor: _selectedPage.fabColor,child: _selectedPage.fabIcon,onPressed: _showExplanatoryText,body: new TabBarView(
        controller: _controller,children: _allPages.map(buildTabView).toList(),)
    );
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读