【问题标题】:Flutter double parsing error Invalid doubleFlutter double 解析错误 Invalid double
【发布时间】:2021-05-26 21:46:30
【问题描述】:

我遇到了这个代码的问题,这给了我这个错误。 我真的是 Flutter 新手,这是我的第一个项目。

import 'dart:ffi';

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BmiCalculator(),
    );
  }
}

//create a statefull widget
class BmiCalculator extends StatefulWidget {
  BmiCalculator({Key key}) : super(key: key);
  @override
  _BmiCalculatorState createState() => _BmiCalculatorState();
}

class _BmiCalculatorState extends State<BmiCalculator> {

  int currentindex = 0;
  double result = 0;
  double height = 0;
  double weight = 0;
  TextEditingController heightController = TextEditingController();
  TextEditingController weightController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Scaffold(
        appBar: AppBar(
          title: Text("BMI Calculator", style: TextStyle(color: Colors.black),),
          elevation: 0.0,
          backgroundColor: Color(0xfffafafa),
          actions: [
            IconButton(
              onPressed: () {},
              icon: Icon(
                Icons.settings,
                color: Colors.black,
              )
            )
          ],

        ),
        body: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.start,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Row(
                  children: [
                    radioButton("Man", Colors.blue, 0),
                    radioButton("Woman", Colors.pink, 1),
                  ],
                ),
                SizedBox(
                  height: 20.0 ,
                ),
                Text(
                  "Your Height in CM" ,
                  style: TextStyle(
                    fontSize: 18.0,
                  ),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  keyboardType: TextInputType.number,
                  controller: heightController,
                  textAlign: TextAlign.center,
                  decoration: InputDecoration(
                    hintText: "Your Height In CM",
                    filled: true,
                    fillColor: Colors.grey[200],
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(8.0),
                      borderSide: BorderSide.none,
                    ),
                  ),
                ),

                SizedBox(
                  height:20.0,
                ),

                Text(
                  "Your Weight in KG" ,
                  style: TextStyle(
                    fontSize: 18.0,
                  ),
                ),
                SizedBox(
                  height: 8.0,
                ),
                TextField(
                  keyboardType: TextInputType.number,
                  textAlign: TextAlign.center,
                  decoration: InputDecoration(
                    hintText: "Your Weight In KG",
                    filled: true,
                    fillColor: Colors.grey[200],
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(8.0),
                      borderSide: BorderSide.none,
                    ),
                  ),
                ),
                SizedBox(height: 20.0,),

                Container(
                  width: double.infinity,
                  height: 50.0,
                  child: FlatButton(
                    onPressed: () {
                      setState(() {
                        height = double.parse(heightController.value.text);
                        weight = double.parse(weightController.value.text);
                      });
                      calculateBmi(height, weight);
                    },
                    color: Colors.blue,
                    child:Text("Calculate", style: TextStyle(
                      color: Colors.white,
                    )),
                  ),
                ),

                SizedBox(
                  height: 20.0,
                ),

                Container(
                  width: double.infinity,
                  child: Text(
                      "Your BMI is : ",
                      textAlign: TextAlign.center,
                      style: TextStyle(
                        fontSize: 24.0,
                        fontWeight: FontWeight.bold,
                      )
                  )
                ),
                SizedBox(
                  height: 50.0,
                ),

                Container(
                    width: double.infinity,
                    child: Text(
                        "$result",
                        textAlign: TextAlign.center,
                        style: TextStyle(
                          fontSize: 40.0,
                          fontWeight: FontWeight.bold,
                        )
                    )
                ),
              ],
            ),
          ),
        )
      ),
    );
  }

  
  void calculateBmi(double height, double weight){
    double finalresult = weight / (height * height / 10000);
    double bmi = finalresult;
    setState(() {
      result = bmi;
    });
  }
  
  void changeIndex(int index){
    setState(() {
      currentindex = index;
    });
  }

  Widget radioButton(String value, Color color, int index){
    return Expanded(
      child: Container(
        margin: EdgeInsets.symmetric(horizontal: 12.0),
        height: 80.0,
        child: FlatButton(
          color: currentindex == index ? color : Colors.grey[200],
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),

          onPressed: () {
            changeIndex(index);
          },

          child: Text(value, style: TextStyle(
            color: currentindex == index ? Colors.white : color,
            fontSize: 22.0,
            fontWeight: FontWeight.bold,
          )),
        )
      ),
    );
  }

}

这是错误:

════════手势捕获的异常════════════════════════════════════ ════════════════════════════ 处理手势时引发以下 FormatException: 无效的双重

当异常被抛出时,这是堆栈: #0 double.parse (dart:core-patch/double_patch.dart:111:28) #1 _BmiCalculatorState.build..(包:lab1_flutter/main.dart:129:41) #2 State.setState (package:flutter/src/widgets/framework.dart:1244:30) #3 _BmiCalculatorState.build。 (包:lab1_flutter/main.dart:127:23) #4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19) ... 处理程序:“onTap” 识别器:TapGestureRecognizer#50a78 debugOwner:手势检测器 状态:可能 赢得竞技场 finalPosition:偏移量(150.6,444.6) finalLocalPosition:偏移量(138.6,36.6) 按钮:1 发送点击向下 ══════════════════════════════════════════════════ ══════════════════════════════════════════════════

【问题讨论】:

    标签: android flutter android-studio


    【解决方案1】:

    第 129 行发生了什么?

    您能告诉我们更改此代码后显示的内容吗?

     setState(() {
      print(heightController.value.text);
      print(weightController.value.text);
      height = double.parse(heightController.value.text);
      weight = double.parse(weightController.value.text);
     });
    
    

    我的猜测是你在TextField中使用了heightController,而不是weightController,所以它的值为null,所以解析时会抛出错误。

    【讨论】:

    • I/flutter (4850): 182 I/flutter (4850): 身高有显示,体重没有显示,你一定是对的
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多