采用以下非空安全 Dart 代码:
static String appBarShiftTitleString(int fromEpochSeconds) {
String monthWord;
String dayWord;
DateTime dt = DateTime.fromMillisecondsSinceEpoch(fromEpochSeconds * 1000);
switch (dt.month) {
case 1:
monthWord = "Jan";
break;
case 2:
monthWord = "Feb";
break;
case 3:
monthWord = "Mar";
break;
case 4:
monthWord = "Apr";
break;
case 5:
monthWord = "May";
break;
case 6:
monthWord = "Jun";
break;
case 7:
monthWord = "Jul";
break;
case 8:
monthWord = "Aug";
break;
case 9:
monthWord = "Sep";
break;
case 10:
monthWord = "Oct";
break;
case 11:
monthWord = "Nov";
break;
case 12:
monthWord = "Dec";
break;
}
switch (dt.weekday) {
case 1:
dayWord = "Mon";
break;
case 2:
dayWord = "Tue";
break;
case 3:
dayWord = "Wed";
break;
case 4:
dayWord = "Thu";
break;
case 5:
dayWord = "Fri";
break;
case 6:
dayWord = "Sat";
break;
case 7:
dayWord = "Sun";
break;
}
return dayWord + ' ' + monthWord + ' ' + dt.day.toString();
}
Android Studio 说,“必须先分配不可为空的局部变量‘dayWord’,然后才能使用它。”
我理解错误并发现我可以像这样简单地修改方法的前两行:
String monthWord = "error!";
String dayWord = "error!";
这样,我就满足了语言规则,如果我们达到了变量没有被分配的不可能的情况,那将是显而易见的。
不过,这似乎很棘手......所以在这些类型的场景中,将此代码转换为空安全的优雅且正确的方法是什么,如果有多种方法,那么优缺点是什么?
谢谢!