【问题标题】:Flutter Instance member ‘result’ can’t be accessed using static access无法使用静态访问访问 Flutter Instance 成员“结果”
【发布时间】:2021-04-13 14:43:46
【问题描述】:

请放轻松,这是我第一次使用flutter/dart(几天后),也是我第一次学习一门语言,我对类和函数还没有完全理解...

基本上,我创建了一个应用程序,它从三个 x,y 点计算圆的直径并输出圆心坐标和圆的直径。我让它在一个 main.dart 文件中工作,但它很乱,我将计算很多其他的东西,其中一些使用这组方程作为圆形数据进行进一步计算。

我在另一个名为 'CalcCCenter' 的文件 (calculator.dart) 中创建了一个类,并将其导入到 main.dart:

import 'package:scidart/numdart.dart';

class CalcCCenter {
  double x1;
  double y1;
  double x2;
  double y2;
  double x3;
  double y3;
  double cX;
  double cY;
  double cDiameter;

  CalcCCenter(
      {this.x1,
      this.y1,
      this.x2,
      this.y2,
      this.x3,
      this.y3,
      this.cX,
      this.cY,
      this.cDiameter}) {
    double a = x1 * (y2 - y3) - y1 * (x2 - x3) + x2 * y3 - x3 * y2;

    double b = (x1 * x1 + y1 * y1) * (y3 - y2) +
        (x2 * x2 + y2 * y2) * (y1 - y3) +
        (x3 * x3 + y3 * y3) * (y2 - y1);

    double c = (x1 * x1 + y1 * y1) * (x2 - x3) +
        (x2 * x2 + y2 * y2) * (x3 - x1) +
        (x3 * x3 + y3 * y3) * (x1 - x2);
    cX = -b / (2 * a);
    cY = -c / (2 * a);

    print('Circle center X $cX');
    print('Circle center y $cY');

    cDiameter = ((hypotenuse(cX - x1, cY - y1)) * 2);
    print('Circle diameter $cDiameter');
  }
}

在 main.dart 我有这个:

onPressed: () {
                      setState(
                        () {
                          double x1 = double.parse(num1controller.text);
                          double y1 = double.parse(num2controller.text);
                          double x2 = double.parse(num3controller.text);
                          double y2 = double.parse(num4controller.text);
                          double x3 = double.parse(num5controller.text);
                          double y3 = double.parse(num6controller.text);
                         

                          CalcCCenter(
                            x1: x1,
                            y1: y1,
                            x2: x2,
                            y2: y2,
                            x3: x3,
                            y3: y3,
                          );

                          //some code here to bring the values from calulator.dart

                        },
                      );
                    },

应用程序的输入工作正常,calulator.dart 中的“CalcCCenter”类正在获取值并打印它们(来自calculator.dart)。我只需要将它们(cX、cY 和 Cdiameter)带回 main.dart 即可使用。我将如何使用函数执行此操作?我尝试了一些方法,但不断收到错误“Flutter Instance member ‘result’ can't be access using static access”。对不起,如果这对许多人来说似乎很基本,但我才刚刚开始。

【问题讨论】:

    标签: function flutter class dart


    【解决方案1】:

    您可以调用一个函数,该函数返回一个包含计算值的列表,而不是计算构造函数内的所有内容。

    示例代码:

    class CalcCCenter {
    
      List calculate({double x1, double y1, double x2, double y2, double x3, double y3}) {
        double a = x1 * (y2 - y3) - y1 * (x2 - x3) + x2 * y3 - x3 * y2;
    
        double b = (x1 * x1 + y1 * y1) * (y3 - y2) +
            (x2 * x2 + y2 * y2) * (y1 - y3) +
            (x3 * x3 + y3 * y3) * (y2 - y1);
    
        double c = (x1 * x1 + y1 * y1) * (x2 - x3) +
            (x2 * x2 + y2 * y2) * (x3 - x1) +
            (x3 * x3 + y3 * y3) * (x1 - x2);
        double cX = -b / (2 * a);
        double cY = -c / (2 * a);
        
        double cDiameter = ((hypotenuse(cX - x1, cY - y1)) * 2);
        
        print('Circle diameter $cDiameter');
        print('Circle center X $cX');
        print('Circle center y $cY');
    
        return [cX, cY, cDiameter];
      }
    }
    
    

    然后在你的“onPressed”方法中这样调用它:

    onPressed: () {
                          setState(
                            () {
                              double x1 = double.parse(num1controller.text);
                              double y1 = double.parse(num2controller.text);
                              double x2 = double.parse(num3controller.text);
                              double y2 = double.parse(num4controller.text);
                              double x3 = double.parse(num5controller.text);
                              double y3 = double.parse(num6controller.text);
                             
    
                               List result = CalcCCenter().calculate(x1: x1, y1: y1, x2: x2, y2: y2, x3: x3, y3: y3);                
    
                              // Now you can access the calculated values
                              print('cX: ${result[0]}');
                              print('cY: ${result[1]}');
                              print('cDiameter: ${result[2]}');
    
                            },
                          );
                        },
    

    【讨论】:

    • 太棒了,谢谢你。现在一切都说得通了!下班后试试看。
    • 如果有效,别忘了接受正确的答案。
    猜你喜欢
    • 2021-03-22
    • 2020-01-03
    • 1970-01-01
    • 2021-08-09
    • 2020-11-29
    • 2019-06-22
    • 1970-01-01
    • 2021-08-19
    • 2021-11-26
    相关资源
    最近更新 更多