Flutter圈子Flutterflutter

Flutter笔记(二)关于Dart和Weight

2018-10-11  本文已影响39人  最爱平角裤

本文主要内容:dart的基本语法、了解weight框架、weight状态、weight布局介绍

Dart

1、介绍

为什么Flutter会选择 Dart

2、语法

Dart语言的 API 大部分相同, 可以很快能上手。同时也有kotlin 和 JS 的影子

  num a = 1;
  int b = 1;
  double c = 1.0;
// String -> int
var one = int.parse('1');

// String -> double
var onePointOne = double.parse('1.1');

// int -> String
String oneAsString = 1.toString();

// double -> String 注意括号中要有小数点位数,否则报错
String piAsString = 3.14159.toStringAsFixed(2);
class ModelA {
  String name;
  String tag;
  
  //默认构造方法,赋值给name和tag
  ModelA(this.name, this.tag);

  //返回一个空的ModelA
  ModelA.empty();
  
  //返回一个设置了name的ModelA
  ModelA.forName(this.name);
}
var vegetables = new List();

// 或者简单的用List来赋值
var fruits = ['apples', 'oranges'];

// 添加元素
fruits.add('kiwis');

// 添加多个元素
fruits.addAll(['grapes', 'bananas']);

// 获取第一个元素
fruits.first;

// 获取元素最后一个元素
fruits.last;

// 查找某个元素的索引号
assert(fruits.indexOf('apples') == 0);

// 删除指定位置的元素,返回删除的元素
fruits.removeAt(index);

// 删除指定元素,成功返回true,失败返回false
fruits.remove('apples');

// 删除最后一个元素,返回删除的元素
fruits.removeLast();

// 删除指定范围元素,含头不含尾,成功返回null
fruits.removeRange(start,end);

// 删除指定条件的元素,成功返回null
fruits.removeWhere((item) => item.length >6);

// 删除所有的元素
fruits.clear();

// sort()对元素进行排序,传入一个函数作为参数,return <0表示由小到大, >0表示由大到小
fruits.sort((a, b) => a.compareTo(b));

认识Flutter中Widget

import 'package:flutter/material.dart';

class Product {
  const Product({this.name});
  final String name;
}

typedef void CartChangedCallback(Product product, bool inCart);

class ShoppingListItem extends StatelessWidget { //无状态widget
  ShoppingListItem({Product product, this.inCart, this.onCartChanged})
      : product = product,
        super(key: new ObjectKey(product));

  final Product product;
  final bool inCart;
  final CartChangedCallback onCartChanged;

  Color _getColor(BuildContext context) {
    return inCart ? Colors.black54 : Theme.of(context).primaryColor;
  }

  TextStyle _getTextStyle(BuildContext context) {
    if (!inCart) return null;

    return new TextStyle(
      color: Colors.black54,
      decoration: TextDecoration.lineThrough,
    );
  }

  @override
  Widget build(BuildContext context) {
    return new ListTile(
      onTap: () {
        onCartChanged(product, !inCart);
      },
      leading: new CircleAvatar(
        backgroundColor: _getColor(context),
        child: new Text(product.name[0]),
      ),
      title: new Text(product.name, style: _getTextStyle(context)),
    );
  }
}

class ShoppingList extends StatefulWidget { //有状态的widget必须实现State
  //用大括号包裹参数可选填,但是要指明类型。
  ShoppingList({Key key, this.products}) : super(key: key);//可以直接赋值给成员变量

  final List<Product> products;

  @override
  _ShoppingListState createState() => new _ShoppingListState();
}

class _ShoppingListState extends State<ShoppingList> {
  Set<Product> _shoppingCart = new Set<Product>();

  void _handleCartChanged(Product product, bool inCart) {
    setState(() {//修改widget状态,类似Android里View的ondraw()方法

      if (inCart)
        _shoppingCart.add(product);
      else
        _shoppingCart.remove(product);
    });
  }

  @override
  Widget build(BuildContext context) {//build里堆砌布局 可以持有变量数据widget.。相当于databind在xml中的作用
    //不足就是迷之缩进,不过编译器会默认提示代码块的结束节点
    return new Scaffold( //Material承载Widget,包含appbar、snackbar、drawer等material design的设定。
      appBar: new AppBar(//一般用于Scaffold内 ,内有标题,二级页面返回按键等,不止这些,tabbar等也会需要它 。
        title: new Text('Shopping List'),
      ),
      body: new ListView(
        padding: new EdgeInsets.symmetric(vertical: 8.0),
        children: widget.products.map((Product product) {
          return new ShoppingListItem(
            product: product,
            inCart: _shoppingCart.contains(product),
            onCartChanged: _handleCartChanged,
          );
        }).toList(),
      ),
    );
  }
}

void main() { //顶级函数入口
  runApp(new MaterialApp(//runApp函数接受给定的Widget并使其成为widget树的根、框架强制根widget覆盖整个屏幕
    title: 'Shopping App',//title指定传入的参数
    home: new ShoppingList(//widget可以当做参数传递
      products: <Product>[
        new Product(name: 'Eggs'),
        new Product(name: 'Flour'),
        new Product(name: 'Chocolate chips'),
      ],
    ),
  ));
}

布局

Widgets 目录

最后看下大神给的widge分类图


参考
上一篇下一篇

猜你喜欢

热点阅读