【重要】Flutter之Dart常用数据类型-辅导说明源码

来源:5-2 Flutter之Dart常用数据类型(数字、类型转换)

CrazyCodeBoy

2019-08-01

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_dart_learn/data_type.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter必备Dart基础',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter必备Dart基础'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: ListView(
          children: <Widget>[
            DataType(),
          ],
        ),
      ),
    );
  }
}

data_type.dart

import 'package:flutter/material.dart';

///常用数据类型
class DataType extends StatefulWidget {
  
  _DataTypeState createState() => _DataTypeState();
}

class _DataTypeState extends State<DataType> {
  
  Widget build(BuildContext context) {
    _numType();
    _stringType();
    _boolType();
    _listType();
    _tips();
    _mapType();
    return Container(
      child: Text('常用数据类型,请看控制台输出'),
    );
  }

  ///数字类型
  _numType() {
    num num1 = -1.0; //是数字类型的父类,有两个子类 int 和 double。
    num num2 = 2;
    int int1 = 3; //只能是整数
    double d1 = 1.68; //双精度)浮点数
    print("num:$num1 num:$num2 int:$int1 double:$d1");
    print(num1.abs()); //求绝对值
    print(num1.toInt()); //转换成int
    print(num1.toDouble()); //转换成Double
  }

  ///字符串
  _stringType() {
    String str1 = '字符串', str2 = "双引号"; //字符串定义
    String str3 = 'st1:$str1 str2:$str2'; //字符串拼接
    String str5 = '常用数据类型,请看控制台输出';
    String str4 = 'st1:' + str1 + ' str2:' + str2; //字符串拼接
    print(str3);
    print(str4);
    //常用方法
    print(str5.substring(1, 5)); //字符串截取
    print(str5.indexOf('类型')); //获取指定字符串位置
    //作业:startsWith,replaceAll,contains,split等
  }

  ///布尔类型,Dart 是强 bool 类型检查,只有bool 类型的值是true 才被认为是true
  _boolType() {
    bool success = true, fail = false;
    print(success);
    print(fail);
    print(success || fail); //true
    print(success && fail); //false
  }

  ///List集合
  _listType() {
    print('----_listType----');

    ///集合初始化的方式
    List list = [1, 2, 3, '集合']; //初始化时,添加元素
    print(list);
    List<int> list2 = [];
    // list2 = list;//错误做法,类型转换错误
    List list3 = [];
    list3.add('list3'); //通过add方法添加元素
    list3.addAll(list);
    print(list3);
    List list4 = List.generate(3, (index) => index * 2);
    print(list4);

    ///遍历集合的方式
    for (int i = 0; i < list.length; i++) {
      print(list[i]);
    }
    for (var o in list) {
      print(o);
    }
    list.forEach((val) {
      print(val);
    });
    //作业
    //list.removeXx,insert,sublist,indexOf等
  }

  ///map是将key和value相关联的对象,key和value都可以是任何类型的对象,并且key是唯一的如果key重复后面添加的key会替换前面的
  _mapType() {
    print('----_mapType----');

    ///Map初始化
    Map names = {'xiaoming': '小明', 'xiaohong': '小红'};
    print(names);
    Map ages = {};
    ages['xiaoming'] = 16;
    ages['xiaohong'] = 18;
    print(ages);

    ///Map遍历
    ages.forEach((k, v) {
      print('$k $v');
    });
    Map ages2 = ages.map((k, v) {
      //迭代生成一个新Map
      return MapEntry(v, k);
    });
    print(ages2);
    for (var key in ages.keys) {
      print('$key ${ages[key]}');
    }
    //作业
    //keys,values,remove,containsKey
  }

  ///科普小知识:dynamic、var、Object三者的区别
  ///dynamic:是所有Dart对象的基础类型, 在大多数情况下,通常不直接使用它,
  ///通过它定义的变量会关闭类型检查,这意味着 dynamic x = 'hal';x.foo();
  ///这段代码静态类型检查不会报错,但是运行时会crash,因为x并没有foo()方法,所以建议大家在编程时不要直接使用dynamic;
  ///var:是一个关键字,意思是“我不关心这里的类型是什么。”,系统会自动推断类型runtimeType;
  ///Object:是Dart对象的基类,当你定义:Object o=xxx;时这时候系统会认为o是个对象,你可以调用o的toString()和hashCode()方法
  ///因为Object提供了这些方法,但是如果你尝试调用o.foo()时,静态类型检查会进行报错;
  ///综上不难看出dynamic与Object的最大的区别是在静态类型检查上;
  _tips() {
    print('----_tips----');
    dynamic x = 'hal';
    print(x.runtimeType);
    print(x);
    x = 123;
    print(x);
    print(x.runtimeType);
    var a = 'hal';
    //a = 123;//你可以改变 x的类型,但是无法改变 a的类型
    print(a.runtimeType);
    print(a);
    Object o1 = '11';
    print(o1.runtimeType);
    print(o1);
  }
}
写回答

2回答

曹琛4160885

2021-04-20

请问关键字除了var还有let吗

0
0

CrazyCodeBoy

提问者

2019-08-01

以上。

0
2
染指凉城丶
回复
小胖砸z
自定义的方法
2019-09-12
共2条回复

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3277 问题

查看课程