Flutter 构建小部件时如何控制null
您能告诉我如何在下一页中包含Image.file的条件吗?我只想在controller.image为而非空时构建它 我有一个错误: 生成容器时抛出以下NoSuchMethodError(填充:EdgeInsets.all(32.0)): 对null调用了方法“[]”。 收件人:空 已尝试呼叫: 当我第一次重定向到此页面时(controller.image为空): 你可以用。只需添加Flutter 构建小部件时如何控制null,flutter,dart,getx,Flutter,Dart,Getx,您能告诉我如何在下一页中包含Image.file的条件吗?我只想在controller.image为而非空时构建它 我有一个错误: 生成容器时抛出以下NoSuchMethodError(填充:EdgeInsets.all(32.0)): 对null调用了方法“[]”。 收件人:空 已尝试呼叫: 当我第一次重定向到此页面时(controller.image为空): 你可以用。只需添加if(controller.image!=null)如下: if (controller?.im
if(controller.image!=null)
如下:
if (controller?.image != null)
Container(
padding: EdgeInsets.all(32),
child: GetBuilder<HomeController>(
builder: (_) {
return Image.file(controller.image);
},
),
),
if(控制器?.image!=null)
容器(
填充:边缘设置。全部(32),
孩子:GetBuilder(
建筑商:(){
返回Image.file(controller.Image);
},
),
),
使用控制器的onInit()方法获取参数:
这样,除了Get.arguments
实际上为空之外,您不需要执行其他空检查
更新
您还需要更新视图,如下所示:
Container(
padding: EdgeInsets.all(32),
child: GetBuilder<HomeController>(
builder: (_) {
return Image.file(_.image); // not return Image.file(controller.image);
// _ here is the instance of HomeController given by the GetBuilder
},
),
),
这也可能引发错误<代码>空对象上的空检查。为了安全起见,我添加了条件成员访问。谢谢。这仍然引发了一个异常:在生成主页(dirty)时引发了以下NoSuchMethodError:对null调用了方法“[]”。Receiver:null尝试调用:[”(“图像”)我添加了控制器代码以供参考我确实喜欢遵循您的指导,但仍然收到相同的错误。我不确定您是否理解一个问题,我有两个页面:主页和OCR详细信息-使用主页启动应用程序-转到OCR详细信息页面(显示OCR图像详细信息)-按下OCR详细信息按钮后,我想将OCR图像详细信息返回主页,因此第一次启动应用程序时,我出现空错误,因为get.arguments为空。请检查更新的答案!
if (controller?.image != null)
Container(
padding: EdgeInsets.all(32),
child: GetBuilder<HomeController>(
builder: (_) {
return Image.file(controller.image);
},
),
),
class HomeController extends GetxController {
final File image;
final File file_loaded;
onInit(){
image = Get.arguments['image'];
file_loaded = Get.arguments['file_loaded'];
}
}
Container(
padding: EdgeInsets.all(32),
child: GetBuilder<HomeController>(
builder: (_) {
return Image.file(_.image); // not return Image.file(controller.image);
// _ here is the instance of HomeController given by the GetBuilder
},
),
),
class OCRDetailsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final OCRDetailsController controller = Get.find();
return Scaffold(
appBar: AppBar(title: Text('OCR Details Page')),
body: Center(
child: FlatButton(
color: Colors.blue,
child: Icon(Icons.save_outlined),
onPressed: () {
final HomeController homeController = Get.find();
homeController.ocr_text = controller.text;
homeController.update();
Get.toNamed(
AppRoutes.HOME,
);
}),
),
);
}
}