美文网首页
flutter笔记

flutter笔记

作者: 老P打码 | 来源:发表于2018-12-23 19:07 被阅读0次

Text

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override 
  Widget build(BuildContext context) {
    return MaterialApp(
      title:'pengpengDemo',
      home: Scaffold(
        body: Center(
          child: Text(
            '中间文字测试用',
            textAlign: TextAlign.left,     // 居左对齐
            maxLines: 5,   // 最大显示行数
            overflow: TextOverflow.ellipsis,   // 溢出类型, 截断/省略号
            style: TextStyle( 
              fontSize: 19,     // 字体
              color: Color.fromARGB(255, 255, 0, 0),
              decoration: TextDecoration.underline,    // 装饰/下划线
              decorationColor: Color.fromARGB(255, 0, 255, 0),
              decorationStyle: TextDecorationStyle.solid,   // 下划线样式
            ),
          ),
        ),
      ),
    );
  }
}

Container

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'pengpengDemo',
      home: Scaffold(
        body: Center(
          child: Container(
            child: Text(
              '内容text测试',
              style: TextStyle(
                fontSize: 15.0,
              ),
            ),
            alignment: Alignment.topLeft,
            width: 375.0,
            height: 400.0,
            padding: EdgeInsets.fromLTRB(10, 5, 10, 5),    // 设置内边距 左、上、下、右
            margin: EdgeInsets.all(100),    // 设置外边距
            decoration: BoxDecoration( 
              gradient: LinearGradient(
                colors: [Colors.red, Colors.blue, Colors.purple],    // 渐变背景色
              ),
              border: Border.all(width: 2.0, color: Colors.black),   // 边框
            ),
          ),
        ),
      ),
    );
  }
}

Image

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'pengpengDemo',
      home: Scaffold(
        body: Center(
          child: Container(
            child: Image.network(
              'https://cdn2.jianshu.io/assets/default_avatar/1-04bbeead395d74921af6a4e8214b4f61.jpg',
              fit: BoxFit.fitHeight,  // 填充模式
              color: Colors.greenAccent,   // 颜色
              colorBlendMode: BlendMode.modulate,     // 混合模式
              repeat: ImageRepeat.repeat,     // image重复模式
            ),
            width: 600,
            height: 600,
            color: Colors.red,
            alignment: Alignment.center,
          )
        ),
      ),
    );
  }
}

ListView

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'pengpeng-flutter-demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            'listViewWidget'
          ),
        ),
        body: ListView(
          children: <Widget>[
            ListTile(    // 类似于iOS 的cell
              leading: Icon(Icons.access_time),    // icon
              title: Text(
                'first tile',
              ),
            ),
            Image.network(
              'https://cdn2.jianshu.io/assets/default_avatar/1-04bbeead395d74921af6a4e8214b4f61.jpg'
            )
          ],
        )
      ),
    );
  }
}

ListView + 组件

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'pengpeng-flutter-demo',
      home: Scaffold(
          appBar: AppBar(
            title: Text('listViewWidget'),
          ),
          body: Center(
            child: Container(
              height: 200.0,
              child: MyList(),
            ),
          )),
    );
  }
}

class MyList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      scrollDirection: Axis.horizontal, // 横向滚动
      children: <Widget>[
        Container(
          width: 180.0,
          color: Colors.purple,
        ),
        Container(
          width: 180.0,
          color: Colors.yellow,
        ),
        Container(
          width: 180.0,
          color: Colors.orange,
        ),
        Container(
          width: 180.0,
          color: Colors.red,
        ),
      ],
    );
  }
}

动态ListView列表

import 'package:flutter/material.dart';

void main() => runApp(MyApp(
  items: List<String>.generate(1000, (i)=>'Item $i')   
));

class MyApp extends StatelessWidget {

  final List<String> items;
  MyApp({Key key, @required this.items}):super(key:key);   // 构造函数 @required 必须传参数, key为默认参数

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'pengpeng-flutter-demo',
      home: Scaffold(
          appBar: AppBar(
            title: Text('listViewWidget'),
          ),
          body: ListView.builder(
            itemCount: items.length,
            itemBuilder: (context, index){
              return ListTile(
                title: Text('${items[index]}'),
              );
            },
          ),
      )
    );
  }
}

GridView(UICollectionView)

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'pengpeng-flutter-demo',
        home: Scaffold(
          appBar: AppBar(
            title: Text('listViewWidget'),
          ),
          body: GridView(
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
              crossAxisCount: 3, // 一行个数
              mainAxisSpacing: 2.0, // 主轴间距(此时为y轴)
              crossAxisSpacing: 2.0,  // 副轴间距(此时为x轴)
              childAspectRatio: 1,    // 宽/高比
            ),
            children: <Widget>[
              Image.network(
                'http://pic1.nipic.com/2008-12-30/200812308231244_2.jpg',
              ),
              Image.network(
                'http://img.bimg.126.net/photo/ZZ5EGyuUCp9hBPk6_s4Ehg==/5727171351132208489.jpg',
              ),
              Image.network(
                'http://img.bimg.126.net/photo/V6nNeq8YN2xPBRxTz8w4VA==/5776429472056759812.jpg',
              ),
              Image.network(
                'http://img.daimg.com/uploads/allimg/120319/1-12031921534Y24.jpg',
              ),
              Image.network(
                'http://wx4.sinaimg.cn/large/006nLajtly1fjx1w2g6mej30dw0dwta5.jpg',
              ),
              Image.network(
                'http://wx3.sinaimg.cn/large/00610vQGly1fkwwq76bkaj30dw0dwq51.jpg',
              ),
              Image.network(
                'http://pic11.nipic.com/20101126/3367900_112731025783_2.jpg',
              ),
              Image.network(
                'http://wx3.sinaimg.cn/large/006nLajtly1fjr9yekp70j30dw0dwq4l.jpg',
              ),
            ],
          ),
        ));
  }
}

row - 水平方向布局

import 'package:flutter/material.dart';

void mian() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Row Widget Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            '水平方向布局',
          ),
        ),
        body: Row( //
          children: <Widget>[
            RaisedButton(  // 不灵活button ,frame根据title变化
              onPressed: (){},
              color: Colors.red,
              child: Text(
                'button-red',
              ),
            ),
            Expanded(child: RaisedButton(  // 灵活button,frame自定调整保证整个屏幕横向填满
              onPressed: (){},
              color: Colors.red,
              child: Text(
                'button-red',
              ),
            ),), 
            RaisedButton(
              onPressed: (){},
              color: Colors.red,
              child: Text(
                'button-red',
              ),
            ),
            RaisedButton(
              onPressed: (){},
              color: Colors.red,
              child: Text(
                'button-red',
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Column - 垂直布局

import 'package:flutter/material.dart';

void mian() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Row Widget Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            '垂直方向布局',
          ),
        ),
        body: Column( 
          crossAxisAlignment: CrossAxisAlignment.center, // 副轴对齐(此时为x轴)
          mainAxisAlignment: MainAxisAlignment.center,  // 主轴对齐方式
          children: <Widget>[
            Text('first text', style: TextStyle(color: Colors.red),),
            Text('second text'),
            Text('thrid text'),
          ],
        ),
      ),
    );
  }
}

stack层叠布局

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var stack = Stack(
      alignment: FractionalOffset(0.5, 0.5), // 0.0-1.0 设置百分比位置
      children: <Widget>[
        CircleAvatar(
          radius: 100.0, // 弧度
          backgroundImage: NetworkImage(
              'http://img.bimg.126.net/photo/ZZ5EGyuUCp9hBPk6_s4Ehg==/5727171351132208489.jpg'),
        ),
        Container(
          decoration: BoxDecoration(
            // 盒子修饰器
            color: Colors.red,
          ),
          padding: EdgeInsets.all(5.0),
          child: Text('PengPeng'),
        )
      ],
    );

    return MaterialApp(
      title: 'Row Widget Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            '垂直方向布局',
          ),
        ),
        body: Center(
          child: stack,
        ),
      ),
    );
  }
}

stack层叠布局(绝对定位)

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var stack = Stack(
      alignment: FractionalOffset(0.5, 0.5), // 0.0-1.0 设置百分比位置
      children: <Widget>[
        CircleAvatar(
          radius: 100.0, // 弧度
          backgroundImage: NetworkImage(
              'http://img.bimg.126.net/photo/ZZ5EGyuUCp9hBPk6_s4Ehg==/5727171351132208489.jpg'),
        ),
        Positioned(
          top: 10.0,
          left: 10.0,
          child: Text(
            'PP_first_text'
          ),
        ),
        Positioned(
          bottom: 10.0,
          right: 10.0,
          child: Text(
            'PP_second_text'
          ),
        )
      ],
    );

    return MaterialApp(
      title: 'Row Widget Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            '垂直方向布局',
          ),
        ),
        body: Center(
          child: stack,
        ),
      ),
    );
  }
}

Card布局

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    
    var card = Card(
      margin: EdgeInsets.all(20),
      child: Column(
        children: <Widget>[
          ListTile(
            title: Text(
              'PengPeng',
              style: TextStyle(
                fontWeight: FontWeight.w300,
              ),
            ),
            subtitle: Text(
              '1222333333'
            ),
            leading: Icon(Icons.account_box, color: Colors.lightBlue,),
          ),
          ListTile(
            title: Text(
              'PengPeng1',
              style: TextStyle(
                fontWeight: FontWeight.w300,
              ),
            ),
            subtitle: Text(
              '1222333333'
            ),
            leading: Icon(Icons.account_box, color: Colors.lightBlue,),
          ),
          ListTile(
            title: Text(
              'PengPeng2',
              style: TextStyle(
                fontWeight: FontWeight.w300,
              ),
            ),
            subtitle: Text(
              '1222333333'
            ),
            leading: Icon(Icons.account_box, color: Colors.lightBlue,),
          ),
        ],
      ),
    );

    return MaterialApp(
      title: 'Row Widget Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            '垂直方向布局',
          ),
        ),
        body: Center(
          child: card,
        ),
      ),
    );
  }
}

页面跳转

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: '导航演示',
    home: FirstScreen(),
  ));
}

class FirstScreen extends StatelessWidget {
  @override 
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          '导航页面'
        ),
      ),
      body: Center(
        child: RaisedButton(
          child: Text(
            '点击进入第二页',
          ),
          onPressed: (){
            Navigator.push(context, MaterialPageRoute(
              builder: (context) => SecondScreen(),
            ));
          },
        ),
      ),
    );
  }
}


class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          'SecondPage'
        ),
      ),
      body: Center(
        child: RaisedButton(
          child: Text(
            '返回'
          ),
          color: Colors.red,
          onPressed: (){
            Navigator.pop(context);
          },
        ),
      ),
    );
  }
}

页面跳转并正向传值

import 'package:flutter/material.dart';


class Product{
  final String title;    // 商品标题
  final String description;   // 商品描述
  Product(this.title, this.description);  // 构造函数
}

void main(){
  runApp(MaterialApp(
    title: '导航数据接受与传递',
    home: ProductList(
      products: List.generate(
        20, 
        (i)=>Product('商品$i', '商品描述$i'))
    ),
  ));
}

class ProductList extends StatelessWidget {
  final List<Product> products;
  ProductList({Key key, @required this.products}):super(key:key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('商品列表'),),
      body: ListView.builder(
        itemCount: products.length,
        itemBuilder: (context, index){
          return ListTile(
            title: Text(products[index].title),
            onTap: (){
              Navigator.push(context, MaterialPageRoute(
                builder:(context)=>ProductDetail(product:products[index])
              ));
            }, // 响应⌚️
          );
        },
      )
    );
  }
}

class ProductDetail extends StatelessWidget {
  final Product product;
  ProductDetail({Key key, @required this.product}):super(key:key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          '${product.title}'
        ),
      ),
      body: Center(
        child: Text(
          '${product.description}'
        ),
      ),
    );
  }
}

页面逆向传值

import 'package:flutter/material.dart';

void main(){
  runApp(MaterialApp(
    title: '页面逆向传值',
    home: FirstPage(),
  ));
}

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('首页'),
      ),
      body: Center(
        child: RouteButton(),
      ),
    );
  }
}

class RouteButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: (){
        _navigateToNewPage(context);
      },
      child: Text('去传值'),
    );
  }
}

_navigateToNewPage(BuildContext context) async {
  final reuslt = await Navigator.push(context, MaterialPageRoute(
    builder: (context)=>SecondPage(),
  ));

  Scaffold.of(context).showSnackBar(SnackBar(content: Text('$reuslt')));

}


class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          '第二页'
        ),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              child: Text(
                '编号一'
              ),
              onPressed: (){
                Navigator.pop(context, '编号一');
              },
            ),
            RaisedButton(
              child: Text(
                '编号二'
              ),
              onPressed: (){
                Navigator.pop(context, '编号二');
              },
            ),
          ],
        ),
      ),
    );
  }
}

相关文章

网友评论

      本文标题:flutter笔记

      本文链接:https://www.haomeiwen.com/subject/kilikqtx.html