'String?' 类型的值不能分配给“字符串”类型的变量

时间:2021-03-06 17:25:40

标签: flutter

这里有什么问题? 这是我用 Flutter 编写的第一个程序,但它失败了。请帮帮我,这是教程中角色的复制角色

import 'dart:io';


void main() 
{
  stdout.writeln('Type in your name please');
  String  input = stdin.readLineSync();


  stdout.writeln('Hi $input nice to meet u ');
  
}

4 个答案:

答案 0 :(得分:3)

此错误与“空安全”有关,readLineSync 返回“字符串?”,并且您的变量 input 不接受空值。此代码可以帮助您:

void main(List<String> args) {
  print('Type in your name please:');
  var input = stdin.readLineSync();

  print('Hi $input, nice to meet you');

  print('Done!');
}

答案 1 :(得分:0)

首先,这是飞镖,而不是颤振。 Flutter 是框架。如果您目前正在学习 dart,InteliJ IDEA 是最好的 dart ide。有免费的社区版。

这样的事情会起作用:

import 'dart:io';

void main(){
  stdout.write("Type in your name please: ");
  var name = stdin.readLineSync();
  stdout.writeln('Hi $input nice to meet u ');
}

stdin.readLineSync(); 实际上并不返回字符串,因此您需要使用 var(推断类型)。使用 name.runtimeType; 查找它返回的类型。

答案 2 :(得分:0)

你也可以把字符串改成字符串?像这样:

import 'dart:io';

void main()
{
    stdout.writeln('Type in your name please');
    String? input = stdin.readLineSync();

    stdout.writeln('Hi $input nice to meet u ');
}

答案 3 :(得分:-1)

这只是因为在 Dart 3 中添加了一个称为 Null Safety 的功能,用于保证输入不会为 Null 所以你只需要添加一个 '!'在你的“stdin.readLineSync()”中,你就完成了这里是代码:

    import 'dart:io';


    void main() 
    {
      stdout.writeln('Type in your name please');
      String  input = stdin.readLineSync()!;
    
    
      stdout.writeln('Hi $input nice to meet u ');
      

}