Выпуск калькулятора флаттера - PullRequest
0 голосов
/ 03 декабря 2018

Как я могу исправить эту проблему во Flutter, и что такое же id в Native Android?Я сделал калькулятор, но результат не отображается в виджете «Текст».После нажатия на один из арифметических операторов

он должен показать результат в тексте "null",

, но ничего не произошло.

I 'мы приложили изображение для задачи Flutter Image App Это код

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

void main() {
runApp(MaterialApp(home: Calculator()));
}

class Calculator extends StatefulWidget {
@override
_CalculatorState createState() => _CalculatorState();
}

class _CalculatorState extends State<Calculator> {
var theResult, firstNum, secondNum;
void divideTheNums() {
setState(() {
theResult = firstNum / secondNum;
});
}

void multiplyTheNums() {
setState(() {
theResult = firstNum * secondNum;
});
}

void addTheNums() {
setState(() {
theResult = firstNum + secondNum;
});
}

void subtractTheNums() {
setState(() {
theResult = firstNum - secondNum;
});
}

Widget build(BuildContext context) {
return new Scaffold(
resizeToAvoidBottomPadding: false,
appBar: AppBar(
backgroundColor: Colors.redAccent,
centerTitle: true,
title: Text(
"Calculator",
),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"OutPut:",
style: TextStyle(
fontSize: 25.0, fontWeight: FontWeight.w700),
),
Text(theResult.toString()),
Container(
margin: EdgeInsets.only(bottom: 30.0), child: Text(""))
],
),
Container(
margin: EdgeInsets.only(bottom: 20.0),
child: TextField(
controller: TextEditingController(),
decoration: InputDecoration(
hintText: "Enter First Number:",
border: OutlineInputBorder()),
),
),
TextField(
controller: TextEditingController(),
decoration: InputDecoration(
hintText: "Enter Second Number:",
border: OutlineInputBorder()),
), Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
margin: EdgeInsets.only(right: 20.0),
child: RaisedButton(
color: Colors.redAccent,
onPressed: divideTheNums,
child: Text(
"/",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
),
Container(
margin: EdgeInsets.only(),
child: RaisedButton(
color: Colors.redAccent,
onPressed: multiplyTheNums,
child: Text(
"*",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
margin: EdgeInsets.only(right: 20.0, top: 20.0),
child: RaisedButton(
color: Colors.redAccent,
highlightColor: Colors.white,
onPressed: subtractTheNums,
child: Text(
"-",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
),
Container(
margin: EdgeInsets.only(top: 20.0),
child: RaisedButton(
color: Colors.redAccent,
onPressed: addTheNums,
child: Text(
"+",
style: TextStyle(color: Colors.white, fontSize: 23.0),
),
),
)
],
)
],
),
),
),
),
);
}
}

1 Ответ

0 голосов
/ 03 декабря 2018

проблема в том, что вы не получаете значение TextField в любом месте, и вы присваиваете значение вашего первого и второго значений, которое по умолчанию равно нулю.

Чтобы решить эту проблему, вы можете использовать Форма и TextFormField .я думаю, что следующий код поможет вам прояснить вашу идею.

вы также можете использовать проверку в TextFormField. Для проверки или проверки, является ли он нулевым или нет.

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

void main() {
  runApp(MaterialApp(home: Calculator()));
}

class Calculator extends StatefulWidget {
  @override
  _CalculatorState createState() => _CalculatorState();
}

class _CalculatorState extends State<Calculator> {
  double theResult, firstNum, secondNum;
  final _form =  GlobalKey<FormState>();

  void divideTheNums() {
    _form.currentState.save();
    setState(() {
      theResult = firstNum / secondNum;
    });
  }

  void multiplyTheNums() {
    _form.currentState.save();
    setState(() {
      theResult = firstNum * secondNum;
    });
  }

  void addTheNums() {
    _form.currentState.save();
    setState(() {
      theResult = firstNum + secondNum;
    });
  }

  void subtractTheNums() {
    _form.currentState.save();
    setState(() {
      theResult = firstNum - secondNum;
    });
  }

  Widget build(BuildContext context) {
    return new Scaffold(
      resizeToAvoidBottomPadding: false,
      appBar: AppBar(
        backgroundColor: Colors.redAccent,
        centerTitle: true,
        title: Text(
          "Calculator",
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Container(
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Text(
                      "OutPut:",
                      style: TextStyle(
                          fontSize: 25.0, fontWeight: FontWeight.w700),
                    ),
                    Text(theResult==null?"":theResult.toString()),
                    Container(
                        margin: EdgeInsets.only(bottom: 30.0), child: Text(""))
                  ],
                ),
                Form(
                  key: _form,
                  child: Container(
                    margin: EdgeInsets.only(bottom: 20.0),
                    child: Column(
                      children: <Widget>[
                        TextFormField(
                          controller: TextEditingController(),
                          onSaved: (value){
                            firstNum = double.parse(value);
                          },
                          keyboardType: TextInputType.numberWithOptions(),
                          decoration: InputDecoration(
                              hintText: "Enter First Number:",
                              border: OutlineInputBorder()),
                        ),
                        Padding(padding: EdgeInsets.only(top: 10.0),),
                        TextFormField(
                          controller: TextEditingController(),
                          onSaved: (value){
                            secondNum = double.parse(value);
                          },
                          keyboardType: TextInputType.numberWithOptions(),
                          decoration: InputDecoration(
                              hintText: "Enter Second Number:",
                              border: OutlineInputBorder()),
                        ),
                      ],
                    ),
                  ),
                ),
                Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    Container(
                      margin: EdgeInsets.only(right: 20.0),
                      child: RaisedButton(
                        color: Colors.redAccent,
                        onPressed: divideTheNums,
                        child: Text(
                          "/",
                          style: TextStyle(color: Colors.white, fontSize: 23.0),
                        ),
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.only(),
                      child: RaisedButton(
                        color: Colors.redAccent,
                        onPressed: multiplyTheNums,
                        child: Text(
                          "*",
                          style: TextStyle(color: Colors.white, fontSize: 23.0),
                        ),
                      ),
                    )
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    Container(
                      margin: EdgeInsets.only(right: 20.0, top: 20.0),
                      child: RaisedButton(
                        color: Colors.redAccent,
                        highlightColor: Colors.white,
                        onPressed: subtractTheNums,
                        child: Text(
                          "-",
                          style: TextStyle(color: Colors.white, fontSize: 23.0),
                        ),
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.only(top: 20.0),
                      child: RaisedButton(
                        color: Colors.redAccent,
                        onPressed: addTheNums,
                        child: Text(
                          "+",
                          style: TextStyle(color: Colors.white, fontSize: 23.0),
                        ),
                      ),
                    )
                  ],
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...