Android Studio中Flutter程序无法读取stdin输入并抛出空值异常求助
问题分析与解决
问题根源
你这段代码使用了dart:io的stdin.readLineSync(),这个API是专为Dart控制台程序设计的。在Flutter移动设备(安卓模拟器/真机)环境下,不存在标准输入流,调用该方法后会直接返回null,而你代码里的!强制非空断言会触发Null check operator used on a null value异常。
另外Android Studio的调试控制台仅负责输出日志,不会为移动应用提供输入交互通道,所以程序直接跳过输入步骤,拿到null后立刻报错。
解决方案
方案1:切换到Dart控制台项目运行
如果只是练习Dart基础语法,不要在Flutter项目中运行这段代码:
- 在Android Studio中新建Dart Console Application项目
- 复制你的代码到新项目中,运行时终端会弹出输入框,让你输入数字,即可正常执行逻辑。
方案2:用Flutter UI组件实现输入(适配移动场景)
如果要在Flutter应用中实现数字相加功能,需要用Flutter的UI组件获取用户输入,比如TextField,示例代码如下:
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('数字相加计算器')), body: const NumberAdditionWidget(), ), ); } } class NumberAdditionWidget extends StatefulWidget { const NumberAdditionWidget({super.key}); @override State<NumberAdditionWidget> createState() => _NumberAdditionWidgetState(); } class _NumberAdditionWidgetState extends State<NumberAdditionWidget> { final _firstController = TextEditingController(); final _secondController = TextEditingController(); String _result = ''; void _calculate() { try { final first = double.parse(_firstController.text); final second = double.parse(_secondController.text); setState(() { _result = '计算结果:${first + second}'; }); } catch (e) { setState(() { _result = '请输入有效的数字'; }); } } @override void dispose() { _firstController.dispose(); _secondController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ TextField( controller: _firstController, keyboardType: TextInputType.numberWithOptions(decimal: true), decoration: const InputDecoration(labelText: '请输入第一个数字'), ), TextField( controller: _secondController, keyboardType: TextInputType.numberWithOptions(decimal: true), decoration: const InputDecoration(labelText: '请输入第二个数字'), ), const SizedBox(height: 20), ElevatedButton(onPressed: _calculate, child: const Text('计算')), const SizedBox(height: 20), Text(_result, style: const TextStyle(fontSize: 18)), ], ), ); } }
这段代码通过Flutter的TextField组件获取用户输入,点击按钮后执行计算逻辑,并将结果展示在界面上,完全适配移动设备的交互逻辑。
内容的提问来源于stack exchange,提问作者aJazz
相关产品推荐
相关产品推荐

