簡體   English   中英

必須初始化不可為 null 的實例字段“arCoreController”

[英]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;

...
  1. 復制你的 package 需要 null 安全的名字

  2. Go 到 pub.dev,搜索 package 名稱。

  3. 尋找帶有 null 安全標簽的類似 package。

  4. 從 pub.dev 復制 package 名稱

  5. 粘貼您的 pubspec.yaml 代替舊的 package 名稱。

  6. 如果使用 VS Code 或輸入命令,請單擊下載按鈕

    flutter 酒吧得到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM