Flutter如何实现类型转换

在Flutter开发中,如何实现不同类型之间的数据转换?比如将String转为int或double,或者将JSON数据转换为Dart对象。有没有通用的方法或最佳实践?特别想知道如何处理转换过程中可能出现的异常情况,例如格式不匹配导致的错误。能否提供一些具体的代码示例?

2 回复

Flutter中类型转换可通过以下方式实现:

  1. 使用as关键字进行显式转换,例如(obj as String).length
  2. 使用isis!进行类型检查,确保转换安全。
  3. 对基础类型,可用toString()int.parse()等方法转换。 注意:避免无效转换,防止运行时错误。

更多关于Flutter如何实现类型转换的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,类型转换主要通过以下几种方式实现:

1. 基本类型转换

数字类型转换

// String → int
String str = "123";
int num1 = int.parse(str);

// String → double
String str2 = "123.45";
double num2 = double.parse(str2);

// int/double → String
int num3 = 100;
String str3 = num3.toString();

double num4 = 100.5;
String str4 = num4.toStringAsFixed(2); // "100.50"

布尔类型转换

// String → bool
String str = "true";
bool value = str.toLowerCase() == "true";

// int → bool
int num = 1;
bool isTrue = num != 0;

2. 对象类型转换

as 关键字(显式转换)

Object obj = "Hello";
String str = obj as String; // 运行时检查

dynamic dyn = 100;
int number = dyn as int;

is 和 as 结合使用

if (obj is String) {
  String str = obj; // 自动转换,无需 as
  print(str.length);
}

3. Map/List 类型转换

// List 类型转换
List<dynamic> dynamicList = [1, 2, 3];
List<int> intList = dynamicList.cast<int>();

// Map 类型转换
Map<dynamic, dynamic> dynamicMap = {"a": 1, "b": 2};
Map<String, int> stringIntMap = dynamicMap.cast<String, int>();

4. JSON 数据转换

// JSON → Map
String jsonString = '{"name": "John", "age": 30}';
Map<String, dynamic> data = json.decode(jsonString);

// 转换为具体类型
String name = data['name'] as String;
int age = data['age'] as int;

5. 自定义类型转换

使用工厂构造函数:

class Person {
  final String name;
  final int age;
  
  Person({required this.name, required this.age});
  
  factory Person.fromJson(Map<String, dynamic> json) {
    return Person(
      name: json['name'] as String,
      age: json['age'] as int,
    );
  }
}

注意事项:

  • 使用 as 时要确保类型正确,否则会抛出异常
  • 优先使用 is 进行类型检查
  • 对于可能为 null 的值,使用 as? 进行安全转换
  • JSON 解析时注意处理可能的类型不匹配

这些方法覆盖了Flutter中大部分类型转换需求,根据具体场景选择合适的方式。

回到顶部