[英]The non-nullable local variable 'result' must be assigned before it can be used
[英]Non-nullable instance field 'arCoreController' must be initialized
再會! 我是 Flutter 的新手,但我被困在制作 AR 應用程序的問題中
由於這些問題,我幾乎沮喪了一整天......
Dart 分析一直在下面說這個...
不可為空的實例字段 ['Ar_controller'] 必須在 flutter 中初始化。因此我浪費了一整天,明天就是我的演示文稿。 請盡快幫我解決
真的很感激。
import 'dart:typed_data';
import 'package:flutter_auth_ui/armodelselect.dart';
import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:network_image_to_byte/network_image_to_byte.dart';
import 'package:vector_math/vector_math_64.dart' as vector;
import 'armodelselect.dart';
class arviewpage extends StatefulWidget {
objmodel modeldes;
arviewpage(this.modeldes);
@override
_arviewpageState createState() => _arviewpageState(this.modeldes);
}
class _arviewpageState extends State<arviewpage> {
_arviewpageState(this.modeldes);
void initstate(){
super.initState();
}
List<double> cubesize;
objmodel modeldes;
ArCoreController arCoreController;
Uint8List byteImage,byteImage1;
Future<bool> _onWillPop() async {
Navigator.of(context).pop(true);
return true;
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
appBar: AppBar(
title: const Text('Xperience'),
),
body: ArCoreView(
onArCoreViewCreated: _onArCoreViewCreated,
),
),
);
}
//functions::::::::::::::::::
void _onArCoreViewCreated(ArCoreController controller) {
arCoreController = controller;
if(modeldes.type=='sphere'){
_addsphere();
}
else if(modeldes.type=="sphere2"){
_addmoonearth();
}
else if(modeldes.type=='cube'){
_addCube();
}
}
//convert image to byteimage
Future<Uint8List> _networkImageToByte(String imageaddress,String imageaddress1) async {
byteImage = await networkImageToByte(imageaddress);
if(imageaddress1!="0"){
byteImage1=await networkImageToByte(imageaddress1);
}
return byteImage;
}
//convert cube size to double
List<String> convertStringtodoublearr(String size){
var cubesize=size.split(",");
for(int i=0;i<cubesize.length;i++){
this.cubesize[i]=double.parse(cubesize[i]);
}
return cubesize;
}
//sphere ar model implementation
Future _addsphere() async {
await _networkImageToByte(modeldes.img_url,modeldes.explain);
//description ar model:::::::::::::::::::::::::::::::
final material = ArCoreMaterial(
metallic: 1,
color: Colors.blue,
//metallic: 1.0,
textureBytes: byteImage1,
);
final cube = ArCoreCube(
materials: [material],
size: vector.Vector3(0.5,0.2,0.1)
);
final node = ArCoreNode(
shape: cube,
position: vector.Vector3(0,-0.4,0.5),
);
//sphere texture model ::::::::::::::::::::::::::::::::::::
final eamaterial = ArCoreMaterial(
metallic: 1,
color: Colors.blue,
textureBytes: byteImage,
);
final sphere = ArCoreSphere(
materials: [eamaterial],
radius: double.parse(modeldes.size[0]),
);
final eanode = ArCoreNode(
shape: sphere,
position: vector.Vector3(0,0,-1),
children: modeldes.explain=="0"?[]:[node],
);
arCoreController.addArCoreNode(eanode);
}
//cube ar model implementation
Future _addCube() async{
await _networkImageToByte(modeldes.img_url,modeldes.explain);
//description ar model::::::::::::::::::::::::::::::::::::
final material = ArCoreMaterial(
metallic: 1,
color: Colors.blue,
//metallic: 1.0,
textureBytes: byteImage1,
);
final cube = ArCoreCube(
materials: [material],
size: vector.Vector3(0.5,0.2,0.1)
);
final node = ArCoreNode(
shape: cube,
position: vector.Vector3(0,-0.4,0.5),
);
//cube texture model ::::::::::::::::::::::::::::::::::;
final cube_material = ArCoreMaterial(
metallic: 1,
color: Colors.blue,
//metallic: 1.0,
textureBytes: byteImage,
);
final cube_cube = ArCoreCube(
materials: [cube_material],
size: vector.Vector3(double.parse(modeldes.size[0]),double.parse(modeldes.size[1]),double.parse(modeldes.size[2])),
);
final cube_node = ArCoreNode(
shape: cube_cube,
children: modeldes.explain=="0"?[]:[node],
position: vector.Vector3(0,0,-1),
);
arCoreController.addArCoreNode(cube_node);
}
Future _addmoonearth() async {
await _networkImageToByte(modeldes.img_url,modeldes.explain);
//description ar model:::::::::::::::::::::::::::::::
final material = ArCoreMaterial(
metallic: 1,
color: Colors.blue,
//metallic: 1.0,
textureBytes: byteImage1,
);
final moon = ArCoreSphere(
materials: [material],
radius: 0.05,
);
final node = ArCoreNode(
shape: moon,
position: vector.Vector3(0.2,0.3,0.5),
);
//sphere texture model ::::::::::::::::::::::::::::::::::::
final eamaterial = ArCoreMaterial(
metallic: 1,
color: Colors.blue,
textureBytes: byteImage,
);
final sphere = ArCoreSphere(
materials: [eamaterial],
radius: double.parse(modeldes.size[0]),
);
final eanode = ArCoreNode(
shape: sphere,
position: vector.Vector3(0,0,-1),
children: modeldes.explain=="0"?[]:[node],
);
arCoreController.addArCoreNode(eanode);
}
@override
void dispose() {
arCoreController.dispose();
super.dispose();
}
}
如果某些變量在定義時未初始化,則需要 'late' 關鍵字。
https://dart.dev/null-safety/understanding-null-safety#lazy-initialization
...
late ArCoreController arCoreController;
...
復制你的 package 需要 null 安全的名字
Go 到 pub.dev,搜索 package 名稱。
尋找帶有 null 安全標簽的類似 package。
從 pub.dev 復制 package 名稱
粘貼您的 pubspec.yaml 代替舊的 package 名稱。
如果使用 VS Code 或輸入命令,請單擊下載按鈕
flutter 酒吧得到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.