如何在Flutter中从TextFormField保存int数据

时间:2020-06-06 10:27:27

标签: flutter

我做了一些TextFormField,并且我想在按int时将数据保存在FlatButton中。当我按FlatButton时,我希望他检查TextFormField支出和储蓄的总和是否不超过TextFormField的收入。如果TextTormField支出和储蓄的总和更大,我想在文本字段储蓄下显示“ errortext”,“您的支出和储蓄大于您的收入”

class BigNotePage extends StatefulWidget {
  @override
  _BigNotePageState createState() => _BigNotePageState();
}

class _BigNotePageState extends State<BigNotePage> {
  final _formKey = GlobalKey<FormState>();
  String _income;
  String _expenses;
  String _savings;

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: kPading,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          TitlePage('Big Note'),
          Expanded(
            child: Form(
              key: _formKey,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TxtField(
                    label: 'Income',
                    function: (value) => _income = value,
                  ),
                  TxtField(
                    label: 'Expenses',
                    function: (value) => _expenses = value,
                  ),
                  TxtField(
                    label: 'Savings',
                    function: (value) => _savings = value,
                  ),
                  FlatButton(
                    onPressed: () {
                      int.parse(_income) >=
                              int.parse(_expenses) + int.parse(_savings)
                          ? _formKey.currentState.save()
                          : print('null');
                    },
                    child: Text(
                      'WRITE THAT',
                      style: TextStyle(letterSpacing: 1.25),
                    ),
                    color: Colors.yellow,
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(30.0),
                    ),
                  ),
                ],
              ),
            ),
          ),
          Container(
            width: 250.0,
            child: Text(
              '*if you get another income for this mounth, input the income again.',
              style: TextStyle(fontSize: 12.0),
            ),
          ),
        ],
      ),
    );
  }
}

class TxtField extends StatelessWidget {
  TxtField({this.label, this.function});

  final String label;
  final Function function;

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.symmetric(vertical: 8.0),
      child: TextFormField(
        onSaved: function,
        keyboardType: TextInputType.numberWithOptions(decimal: true),
        decoration: InputDecoration(
          labelText: label,
          prefix: Container(
            padding: EdgeInsets.all(8.0),
            child: Text(
              'IDR',
              style:
                  TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
            ),
          ),
        ),
      ),
    );
  }
}

My App Look like this

1 个答案:

答案 0 :(得分:0)

将字符串值替换为控制器值

final _incomeController = TextEditingController();
final _expenseController = TextEditingController();
final _savingController = TextEditingController();

此外,添加

bool _validate = false;

将字符串值转换为TextField的int

        TxtField(
                controller: _incomeController,
                label: 'Income',
                 decoration: InputDecoration(
                  errorText: _validate ? 'Your message' : null,
                 ),
              ),
              TxtField( 
                controller: _expenseController ,
                label: 'Expenses',
                  decoration: InputDecoration(
                  errorText: _validate ? 'Your message' : null,
                  ),
              ),
              TxtField(
               controller: _savingController,
                label: 'Savings',
                 decoration: InputDecoration(
                  errorText: _validate ? 'Your message' : null,
                 ),
              ),

现在扁平按钮逻辑

              onPressed: () {

                     String _income = _incomeController.text;
                     String _expenses = _expenseController.text;
                     String _savings = _savingController.text;

                      int.parse(_income) >=
                              int.parse(_expenses) + int.parse(_savings)
                          ? _formKey.currentState.save()
                          : print('null');
                    },

只要您愿意,就可以运用自己的逻辑