簡體   English   中英

在 Raisedbutton 之后從類中返回一個值

[英]Returning a value from class in flutter after Raisedbutton

我正在構建我的第一個應用程序來計算我工作所需的值。 我已經在 Python 中進行了這項工作,但這真的很不一樣。 我有一個 textformfield,我在其中輸入了“我需要的數據”。 成功后,我從“onPress”按鈕調用一個類並傳遞數據。 計算后,我需要將計算值顯示在文本字段 (spev) 中。 如何將“Buisber”類的值返回到文本字段。 我找了幾天,但找不到。 我確定我在某處讀過它,但就是不明白。 這是一個剝離版本:

import 'package:flutter/material.dart';
void main() {
  runApp(MaterialApp(
    home: Buis(),
  ));
}
class Buis extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String spev = '0';
    TextEditingController kapController = TextEditingController(text: '10.60');
    return Scaffold(
      appBar: AppBar(
        title: Center(
          child: Text("Power Outcome"),
        ),
      ),
      body: Center(
        child: Container(
          decoration: BoxDecoration(
          ),
          child: SingleChildScrollView(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                SizedBox(height: 20),
                Column(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: <Widget>[

                    // Calculate
                    Center(
                      child: RaisedButton(
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(18.0),
                            side: BorderSide(color: Colors.red)),
                        onPressed: () {
                          Buisber(
                            kapController.text);
                        },
                        color: Colors.blue,
                        textColor: Colors.white,
                        child: Text("Calculate".toUpperCase(),
                            style: TextStyle(fontSize: 14)),
                      ),
                    ),

                    // Outcome Spev
                    Container(
                      alignment: Alignment(0, 0),
                      width: 80,
                      height: 30,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.horizontal(
                          left: Radius.circular(40),
                          right: Radius.circular(40),
                        ),
                        border: Border.all(width: 1.0),
                      ),
                      child: Text(
                        '$spev',
                        style: TextStyle(
                          fontSize: 15,
                        ),
                      ),
                    ),
                    SizedBox(height: 10),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
class Buisber {
  Buisber(kap) {
    var kap1 = double.parse(kap);
    print(kap1);
    var spev = 1.7 * (50 / kap1);
    spev = num.parse(spev.toStringAsFixed(2));
    //testing (print works)
    //how to send back Outcome Spev
    print("Spev is " '$spev');
  }
}

@Pim,為什么不創建一個函數而不是類並在 Stateful 小部件中接收值? 然后您可以刷新狀態以更新值,如下所示,

void main() {
  runApp(new Buis());
}

class Buis extends StatefulWidget {
  @override
  BuisState createState() => BuisState();
}

class BuisState extends State<Buis> {
  var value = '';

  @override
  Widget build(BuildContext context) {
    String spev = '0';
    TextEditingController kapController = TextEditingController(text: '10.60');
    return MaterialApp(home: Scaffold(
      appBar: AppBar(
        title: Center(
          child: Text("Power Outcome"),
        ),
      ),
      body: Center(
        child: Container(
          decoration: BoxDecoration(
          ),
          child: SingleChildScrollView(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                SizedBox(height: 20),
                Column(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: <Widget>[

                    // Calculate
                    Center(
                      child: RaisedButton(
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(18.0),
                            side: BorderSide(color: Colors.red)),
                        onPressed: () {
                          value = getValue(kapController.text).toString();
                          setState(() {});
                        },
                        color: Colors.blue,
                        textColor: Colors.white,
                        child: Text("Calculate".toUpperCase(),
                            style: TextStyle(fontSize: 14)),
                      ),
                    ),

                    // Outcome Spev
                    Container(
                      alignment: Alignment(0, 0),
                      width: 80,
                      height: 30,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.horizontal(
                          left: Radius.circular(40),
                          right: Radius.circular(40),
                        ),
                        border: Border.all(width: 1.0),
                      ),
                      child: Text(
                        value.toString(),
                        style: TextStyle(
                          fontSize: 15,
                        ),
                      ),
                    ),
                    SizedBox(height: 10),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    )
    );
  }
}

// This can be within your BuisState
getValue (kap) {
    var kap1 = double.parse(kap);
    print(kap1);
    var spev = 1.7 * (50 / kap1);
    spev = num.parse(spev.toStringAsFixed(2));
    //testing (print works)
    //how to send back Outcome Spev
    print("Spev is " '$spev');
    return spev;
}

演示

希望這可以幫助。

暫無
暫無

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

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