IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android flutter:Material风格组件 -> 正文阅读

[移动开发]android flutter:Material风格组件

本节通过学习老孟《Flutter实战入门》。
使用Material风格组件需要引用 import ‘package:flutter/material.dart’;
一、MaterialApp
MaterialApp作为顶级容器表示当前App是Material风格的,MaterialApp中设置的样式属性都是全局的,常用的属性,如下:
在这里插入图片描述

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: ExampleWidget(),
    );
  }
}

二、Scaffold
Scaffold是Material组件的布局容器,可用于展示抽屉(Drawer)、通知(Snack Bar)、及底部导航的效果,属性如下:
在这里插入图片描述

class _ExampleWidgetState extends State<StatefulWidget> {
  final TextEditingController _controller = new TextEditingController();
  @override
  Widget build(BuildContext context) {
      return Scaffold(
    appBar: AppBar(title: Text('Flutter 实战入门'),),
    body: Container(
      child: Text('body'),
      alignment: Alignment.center,
    ),
    drawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(child: Text('头像'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    endDrawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(child: Text('头像(end)'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(onPressed: () {},child: Text("+"),),
    floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
    floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling,
    persistentFooterButtons: List.generate(3, (index) {
      return RaisedButton(onPressed: (){},child: Text('persistent'),textColor: Colors.black,);
    }),
    bottomNavigationBar: Row(
      children: <Widget>[
        Expanded(
          child: RaisedButton(onPressed: (){},child: Text('微信'),),
          flex: 1,
        ),
        Expanded(
            child: RaisedButton(onPressed: (){},child: Text('通信录'),),
          flex: 1,
        ),
        Expanded(
            child: RaisedButton(onPressed: (){},child: Text('发现'),),
          flex: 1,
        ),
        Expanded(
          child: RaisedButton(onPressed: (){},child: Text('我'),),
          flex: 1,
        ),
      ],
    ),
    bottomSheet: RaisedButton(onPressed: (){},child: Text('bottomSheet'),),
  );
  }

Scaffold未 打开drawable的效果图
在这里插入图片描述
Scaffold打开抽屉的效果
在这里插入图片描述
三、AppBar
AppBar显示在App的顶部,属性如下:
在这里插入图片描述

//AppBar改动
class _ExampleWidgetState extends State<StatefulWidget> {
  final TextEditingController _controller = new TextEditingController();
  @override
  Widget build(BuildContext context) {
       return Scaffold(
    //AppBar :左侧返回按钮,title右侧有3个图标
    appBar: AppBar(
      leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: (){}),
      title: Text('Flutter 实战入门'),
      actions: <Widget>[
        IconButton(icon: Icon(Icons.add), onPressed: (){}),
        IconButton(icon: Icon(Icons.dashboard), onPressed: (){}),
        IconButton(icon: Icon(Icons.cached),onPressed: (){},),
      ],
    ),
    body: Container(
      child: Text('body'),
      alignment: Alignment.center,
    ),
    drawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(child: Text('头像'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    endDrawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(child: Text('头像(end)'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(onPressed: () {},child: Text("+"),),
    floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
    floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling,
    persistentFooterButtons: List.generate(3, (index) {
      return RaisedButton(onPressed: (){},child: Text('persistent'),textColor: Colors.black,);
    }),
    bottomNavigationBar: Row(
      children: <Widget>[
        Expanded(
          child: RaisedButton(onPressed: (){},child: Text('微信'),),
          flex: 1,
        ),
        Expanded(
            child: RaisedButton(onPressed: (){},child: Text('通信录'),),
          flex: 1,
        ),
        Expanded(
            child: RaisedButton(onPressed: (){},child: Text('发现'),),
          flex: 1,
        ),
        Expanded(
          child: RaisedButton(onPressed: (){},child: Text('我'),),
          flex: 1,
        ),
      ],
    ),
    bottomSheet: RaisedButton(onPressed: (){},child: Text('bottomSheet'),),
  );
    throw UnimplementedError();
  }
  }

AppBar效果
在这里插入图片描述
四、BottomNavigationBar
BottomNavigationBar底部导航栏,属性如下:
在这里插入图片描述

//修改bottomBar,有点问题
class _ExampleWidgetState extends State<StatefulWidget> {
  final TextEditingController _controller = new TextEditingController();
  int _selectIndex = 0;
  @override
  Widget build(BuildContext context) {
     return Scaffold(
    //左侧返回按钮,title右侧有3个图标
    appBar: AppBar(
      leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: (){}),
      title: Text('Flutter 实战入门'),
      actions: <Widget>[
        IconButton(icon: Icon(Icons.add), onPressed: (){}),
        IconButton(icon: Icon(Icons.dashboard), onPressed: (){}),
        IconButton(icon: Icon(Icons.cached),onPressed: (){},),
      ],
    ),
    body: Container(
      child: Text('body'),
      alignment: Alignment.center,
    ),
    drawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(child: Text('头像'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    endDrawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(child: Text('头像(end)'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(onPressed: () {},child: Text("+"),),
    floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
    floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling,
    persistentFooterButtons: List.generate(3, (index) {
      return RaisedButton(onPressed: (){},child: Text('persistent'),textColor: Colors.black,);
    }),
    //修改
    bottomNavigationBar: BottomNavigationBar(
      items: <BottomNavigationBarItem>[
        BottomNavigationBarItem(
          title: Text('微信'),
          icon: Icon(Icons.chat,color: Colors.black,),
          activeIcon: Icon(Icons.chat,color: Colors.green,),
        ),
        BottomNavigationBarItem(
          title: Text('通讯录'),
          icon: Icon(Icons.whatshot,color: Colors.black,),
          activeIcon: Icon(Icons.whatshot,color: Colors.green,),
        ),
        BottomNavigationBarItem(
          title: Text('发现'),
          icon: Icon(Icons.accessible,color: Colors.black,),
          activeIcon: Icon(Icons.accessible,color: Colors.green,),
        ),
        BottomNavigationBarItem(
          title: Text('我'),
          icon: Icon(Icons.access_alarm,color: Colors.black,),
          activeIcon: Icon(Icons.access_alarm,color: Colors.green,),
        ),
      ],
      iconSize: 24,
      currentIndex: _selectIndex,
      onTap: (index) {
        setState(() {
          _selectIndex = index;
        });
      },
      fixedColor: Colors.green,
      type: BottomNavigationBarType.shifting,
    ),
    bottomSheet: RaisedButton(onPressed: (){},child: Text('bottomSheet'),),
  );
    throw UnimplementedError();
  }
  }

有点问题,哪里有问题,请指教。。。。
在这里插入图片描述
五、TabBar
Tab是一排水平的标签,可以来回切换。属性如下:
在这里插入图片描述

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';

String _storageDir = '';
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: ExampleWidget(),
    );
  }
}

// Opens an [AlertDialog] showing what the user typed.

class ExampleWidget extends StatefulWidget {
  ExampleWidget({Key key}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
//    return new _ExampleWidgetState();
  return new _TabBar();
    throw UnimplementedError();
  }
}

class _TabBar extends State<StatefulWidget> {
  final List<String> _tabValues = [
    '语文',
    '英语',
    '数学',
    '物理',
    '化学',
    '生物',
    '政治',
    '地理',
    '历史',
  ];
  TabController _controller;
  @override
  void initState() {
    super.initState();
    _controller = TabController(length: _tabValues.length, vsync: ScrollableState(),);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TabBar'),
        bottom: TabBar(
          tabs: _tabValues.map((f) {
            return Text(f);
          }).toList(),
          controller: _controller,
          indicatorColor: Colors.red,
          indicatorSize: TabBarIndicatorSize.tab,
          isScrollable: true,
          labelColor: Colors.amber,
          unselectedLabelColor: Colors.black,
          indicatorWeight: 5.0,
          unselectedLabelStyle: TextStyle(height: 2),
        ),
      ),
      body: TabBarView(
        controller: _controller,
        children: _tabValues.map((e){
          return Center(
            child: Text(e),
          );
        }).toList(),
      ),
    );
    throw UnimplementedError();
  }
}

在这里插入图片描述
六、Drawer
Drawer是抽屉样式的控件,它的子控件钟一般使用ListView,第一个元素一般使用DrawerHeaader,接下来是ListTile.示例见前文 “二、Scaffold”。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:49:24  更:2021-11-11 12:49:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:48:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码