android flutter:Material风格组件

android flutter:Material风格组件,第1张

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 {
  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: [
          DrawerHeader(child: Text('头像'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    endDrawer: Drawer(
      child: ListView(
        children: [
          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: [
        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 {
  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: [
        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: [
          DrawerHeader(child: Text('头像'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    endDrawer: Drawer(
      child: ListView(
        children: [
          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: [
        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 {
  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: [
        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: [
          DrawerHeader(child: Text('头像'),),
          ListTile(title: Text('我的'),),
          ListTile(title: Text('关于'),),
          ListTile(title: Text('主页'),),
        ],
      ),
    ),
    endDrawer: Drawer(
      child: ListView(
        children: [
          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(
          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 createState() {
//    return new _ExampleWidgetState();
  return new _TabBar();
    throw UnimplementedError();
  }
}

class _TabBar extends State {
  final List _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”。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5434884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存