文章目录
一、 dynamic 数据类型
二、 dynamic 变量无法进行语法检查
三、 dynamic 变量运行时类型修改
四、 完整代码示例
五、 相关资源
Dart 语言中有 dynamic , var , Object , 3 33 种数据类型 ;
一、 dynamic 数据类型
dynamic 数据类型 : dynamic 是 Drat 语言中的 动态数据类型 , 通过 dynamic 关键字定义的变量 , 在 编译时不会管定义的数据类型 , 运行时才处理变量的类型 , 根据变量赋值的类型推测当前的 dynamic 数据类型的运行时数据类型 , dynamic 变量只有在运行时才知道数据类型 ;
dynamic 变量定义 :
dynamic 变量名称 = 变量值
dynamic 变量代码示例 :
dynamicDemo(){ dynamic d = "CSDN"; // 打印 dynamic 变量的运行时类型 print(d.runtimeType); // 打印 dynamic 变量值 print(d); }
运行结果 :
String CSDN
二、 dynamic 变量无法进行语法检查
通过 dynamic 变量可以定义任何数据类型 , 在编译时会使 Dart 语言的静态语法检查失效 ;
如 : 先定义了 dynamic 变量 , 赋值了一个字符串 , 然后调用一个不属于该字符串对象的方法 , 这里肯定出错了 , 但是静态的语法检查肯定检查不出来 , 只能在最后运行报错时知道这里出现了错误 ;
运行时出现错误 :
这 Flutter 界面中也有报错信息 :
三、 dynamic 变量运行时类型修改
dynamic 数据类型 运行时类型可以改变 , 上述的 dynamic d 类型初始化为 String 类型 , 中途将整型赋值给该变量 , 此时该变量的类型变成了 int 类型 ;
代码示例 : 先为 dynamic 变量赋值了 String 类型值 “CSDN” , 然后为 dynamic 变量赋值了 int 类型值 666 ;
dynamicDemo(){ dynamic d = "CSDN"; // 打印 dynamic 变量的运行时类型 print(d.runtimeType); // 打印 dynamic 变量值 print(d); // 调用 dynamic 变量的方法, 静态编译时无法检查其中的错误, 运行时会报错 //d.getName(); // 为 dynamic 变量赋值 int 数据 d = 666; // 打印 dynamic 变量的运行时类型 print(d.runtimeType); // 打印 dynamic 变量值 print(d); }
运行结果 :
String CSDN int 666
四、 完整代码示例
import 'package:flutter/material.dart'; class DartType extends StatefulWidget { @override _DartTypeState createState() => _DartTypeState(); } class _DartTypeState extends State<DartType> { @override Widget build(BuildContext context) { dynamicDemo(); return Container(); } dynamicDemo(){ dynamic d = "CSDN"; // 打印 dynamic 变量的运行时类型 print(d.runtimeType); // 打印 dynamic 变量值 print(d); // 调用 dynamic 变量的方法, 静态编译时无法检查其中的错误, 运行时会报错 //d.getName(); // 为 dynamic 变量赋值 int 数据 d = 666; // 打印 dynamic 变量的运行时类型 print(d.runtimeType); // 打印 dynamic 变量值 print(d); } }
运行结果 :
String CSDN int 666
五、 相关资源
参考资料 :
Dart 开发者官网 : https://api.dart.dev/
Flutter 中文网 ( 非官方 , 翻译的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/
Flutter 官网 : https://flutter.dev/ ( 被墙 )
官方 GitHub 地址 : https://github.com/flutter
Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 )
博客源码下载 :
GitHub 地址 : https://github.com/han1202012/flutter_app_hello ( 随博客进度一直更新 , 有可能没有本博客的源码 )
博客源码快照 : https://download.csdn.net/download/han1202012/15110705 ( 本篇博客的源码快照 , 可以找到本博客的源码 )