나는 세 개의 텍스트 필드가 있는데 그 중 처음 두 개 중에서 선택하고 세 번째 필드로 작업하고 싶습니다. (I have three text fields, want to choose between first two of them, & work with third one)


문제 설명

나는 세 개의 텍스트 필드가 있는데 그 중 처음 두 개 중에서 선택하고 세 번째 필드로 작업하고 싶습니다. (I have three text fields, want to choose between first two of them, & work with third one)

텍스트 필드가 세 개 있습니다. 나는 그들 중 처음 두 가지 중에서 선택하고 싶습니다. & 세 번째로 작업하세요.

어떻게 할까요? 안내해주세요

6
import 'package:flutter/material.dart';

void main() => runApp(new CalculatorApp());

class CalculatorApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(title:'Bending Calculator',
      home: Calculator()
    );
  }
}

class Calculator extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => Calculatore();
}

class Calculatore extends State<Calculator> {
final a = TextEditingController();
  final b = TextEditingController();
  final c = TextEditingController();
// controller mentioned
 String total= "";

void calculate()  {
    int numberA = int.parse(a.text);
    int numberB = int.parse(b.text);
    int numberC = int.parse(c.text);
    int  result;
// if numberA have value then answer will be a+c


if( 
// what condition to do here for between choosing between  textfields a or b.
// i tried numberB ==null   that does not work
// very much confused, no idea what to do please help

){
result = numberA + numberC
} else{ result = numberB + numberC
}


    setState(() {
      total = "$result";
    });
  }
  @override
  Widget build(BuildContext context) {
return Scaffold(appBar: AppBar(title:Text("Calculator")),
        body: SafeArea(
            child: ListView(
              children: <Widget>[
                Row( mainAxisAlignment: MainAxisAlignment.center ,
                  children: <Widget>[
                    // first textfield

                    Container(width: MediaQuery.of(context).size.width *0.45 ,height: 50,
                       child: TextField(
                           controller: a,
                           decoration: InputDecoration(hintText: " Enter a value"),
                           keyboardType: TextInputType.number),
                    ),
                    Container(width: MediaQuery.of(context).size.width * 0.04,height: 50,),
                    // second textfield
                    Container(width: MediaQuery.of(context).size.width* 0.45,height: 50,
                      child: TextField(
                          controller: b,
                          decoration: InputDecoration(hintText: " Enter  b value"),
                          keyboardType: TextInputType.number),), ],
                ),

                Row(mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[

                    // third textfield

                    Container(width: MediaQuery.of(context).size.width *0.9, height: 50,
                      child: TextField(
                          controller: c,
                          decoration: InputDecoration(hintText: "   Enter c value"),
                          keyboardType: TextInputType.number),),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[

                    //button

                    RaisedButton(
                      onPressed: calculate,
                      child: Text('Calculate'),),
                  ],
                ),
                Text("   Total : $total", style: TextStyle(fontSize: 20.0),),
      ],
            ))
    );
  }
}

참조 솔루션

방법 1:

Based on your comment this should perhaps help. A normal int.parse will throw error if the text you provide to parse is empty. Instead use int.tryParse as in the documentation here. This will return a null if the provided string is empty. Live version available in this dartpad.

    int numberA = int.tryParse(a.text);
    int numberB = int.tryParse(b.text);
    int numberC = int.tryParse(c.text);
    int result;

    // if numberA have value then answer will be a+c

    // Note following conditions have order precedence. So only one of them execute.     
    if (numberA != null && numberC != null) {
      result = numberA + numberC;
    } else if (numberB != null && numberC != null){
      result = numberB + numberC;
    } 

If you want to calculate the totat if all three fields are present. Use the following condition.

    if (numberA != null && numberB != null && numberC != null) {
      result = numberA + numberB + numberC;
    } else if (numberA != null && numberC != null) {
      result = numberA + numberC;
    } else if (numberB != null && numberC != null){
      result = numberB + numberC;
    } 

You can achieve the same by checking the text instead of parsed number.

방법 2:

As I understand you have tried checking whether the value of text field b is null. Have you tried to check whether b.text.isEmpty or isNotEmpty.

방법 3:

"" can't parse to int. You can use "try & catch" or "tryParese". How about this?

void calculate() {
  int numberA = int.tryParse(a.text);
  int numberB = int.tryParse(b.text);
  int numberC = int.tryParse(c.text);
  int result;

  if (numberB == null) {
    result = numberA + numberC;
  } else {
    result = numberB + numberC;
  }

  setState(() {
    total = "$result";
  });
}

(by Manish Kumar TomarAbhilash ChandranDennisYuu Woods)

참조 문서

  1. I have three text fields, want to choose between first two of them, & work with third one (CC BY‑SA 2.5/3.0/4.0)

#dart #textfield #flutter






관련 질문

경고 대신 오류로 "@required" 주석 ("@required" annotation as error instead of warning)

Flutter ThemeData가 텍스트에서 작동하지 않습니다 (Flutter ThemeData is not working for the Text)

Aqueduct 및 Dart: Future<List<T>>(T = ManagedObject)를 JSON으로 직렬화할 수 없습니다. (Aqueduct and Dart: Future<List<T>> (T = ManagedObject) can't be serialized to JSON)

나는 세 개의 텍스트 필드가 있는데 그 중 처음 두 개 중에서 선택하고 세 번째 필드로 작업하고 싶습니다. (I have three text fields, want to choose between first two of them, & work with third one)

각 페이지에 대한 동적 높이로 Flutter Carousel Slider 만들기 (Create a Flutter Carousel Slider with dynamic heigth for each page)

SMS를 보낼 때 flutter url_launcher의 해시 기호 뒤에 메시지 본문이 사라집니다. (Message body disappear after hash symbol in flutter url_launcher when send a SMS)

미래 방법을 조롱하고 'Null'유형을 얻지 않는 방법은 플러터에서 'Future<>'유형의 하위 유형이 아닙니다. (How to mock a future method and not get type 'Null' is not a subtype of type 'Future<>' in flutter)

【NoSuchMethodError】audio_service가 initState에서 시작되지 않습니다 (【NoSuchMethodError】audio_service does not start in initState)

플러터에서 양식 변수를 얻는 방법 (How to get form variables in flutter)

다른 프로세스에서 사용 중이기 때문에 Pub에서 항목을 삭제하지 못했습니다. (Pub failed to delete entry because it was in use by another process)

RenderViewport는 RenderSliver 유형의 하위를 예상했지만 RenderErrorBox 유형의 하위를 수신했습니다. (A RenderViewport expected a child of type RenderSliver but received a child of type RenderErrorBox)

Flutter에서 이름을 확인하는 방법은 무엇입니까? (How to validate Name in flutter?)







코멘트