【Flutter】创建BMI计算器应用并添加依赖和打包

😏*★,°* :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍创建BMI计算器应用并添加依赖和打包。
学其所用,用其所学。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. BMI计算器示例](#:smirk:1. BMI计算器示例)
    • [:blush:2. 添加依赖](#:blush:2. 添加依赖)
    • [:satisfied:3. 应用打包](#:satisfied:3. 应用打包)

😏1. BMI计算器示例

继续前面第一篇的,在显示时间的基础上增加BMI计算器,为了方便,各个功能分成单独dart文件实现,共3个文件。

main.dart

dart 复制代码
import 'package:flutter/material.dart';
import 'time_display.dart';
import 'bmi_calculator.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'frank_test',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('frank_test'),
      ),
      body: SingleChildScrollView(
        child: Column(
          children: const [
            TimeDisplayScreen(),
            BMICalculator(),
          ],
        ),
      ),
    );
  }
}

time_display.dart

dart 复制代码
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'dart:async';

class TimeDisplayScreen extends StatefulWidget {
  const TimeDisplayScreen({super.key});

  @override
  State<TimeDisplayScreen> createState() => _TimeDisplayScreenState();
}

class _TimeDisplayScreenState extends State<TimeDisplayScreen> {
  String _currentTime = '';
  late Timer _timer;

  @override
  void initState() {
    super.initState();
    _updateTime();
    _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      _updateTime();
    });
  }

  @override
  void dispose() {
    _timer.cancel();
    super.dispose();
  }

  void _updateTime() {
    setState(() {
      _currentTime = DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now());
    });
  }

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 4,
      margin: const EdgeInsets.all(16),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            const Text(
              '当前时间',
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 16),
            Text(
              _currentTime,
              style: const TextStyle(fontSize: 24),
            ),
          ],
        ),
      ),
    );
  }
}

bmi_caculator.dart

dart 复制代码
import 'package:flutter/material.dart';

class BMICalculator extends StatefulWidget {
  const BMICalculator({super.key});

  @override
  State<BMICalculator> createState() => _BMICalculatorState();
}

class _BMICalculatorState extends State<BMICalculator> {
  final TextEditingController _heightController = TextEditingController();
  final TextEditingController _weightController = TextEditingController();
  double _bmiResult = 0;
  String _bmiCategory = '';

  void _calculateBMI() {
    final double height = double.tryParse(_heightController.text) ?? 0;
    final double weight = double.tryParse(_weightController.text) ?? 0;

    if (height > 0 && weight > 0) {
      setState(() {
        _bmiResult = weight / ((height / 100) * (height / 100));
        _updateBMICategory();
      });
    }
  }

  void _updateBMICategory() {
    if (_bmiResult < 18.5) {
      _bmiCategory = '偏瘦';
    } else if (_bmiResult < 24) {
      _bmiCategory = '正常';
    } else if (_bmiResult < 28) {
      _bmiCategory = '过重';
    } else {
      _bmiCategory = '肥胖';
    }
  }

  @override
  void dispose() {
    _heightController.dispose();
    _weightController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 4,
      margin: const EdgeInsets.all(16),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            const Text(
              'BMI 计算器',
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 16),
            TextField(
              controller: _heightController,
              keyboardType: TextInputType.number,
              decoration: const InputDecoration(
                labelText: '身高 (cm)',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 16),
            TextField(
              controller: _weightController,
              keyboardType: TextInputType.number,
              decoration: const InputDecoration(
                labelText: '体重 (kg)',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _calculateBMI,
              child: const Text('计算 BMI'),
            ),
            const SizedBox(height: 16),
            if (_bmiResult > 0)
              Column(
                children: [
                  Text(
                    'BMI: ${_bmiResult.toStringAsFixed(1)}',
                    style: const TextStyle(fontSize: 18),
                  ),
                  Text(
                    '状态: $_bmiCategory',
                    style: TextStyle(
                      fontSize: 18,
                      color: _getCategoryColor(),
                    ),
                  ),
                ],
              ),
          ],
        ),
      ),
    );
  }

  Color _getCategoryColor() {
    switch (_bmiCategory) {
      case '偏瘦':
        return Colors.blue;
      case '正常':
        return Colors.green;
      case '过重':
        return Colors.orange;
      case '肥胖':
        return Colors.red;
      default:
        return Colors.black;
    }
  }
}

😊2. 添加依赖

如果程序依赖一些库,比如这里依赖intl,需要在pubspec.yaml文件中添加:

bash 复制代码
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1

😆3. 应用打包

打包web:

bash 复制代码
flutter build web --release
# 运行
cd build/web
python3 -m http.server 8000

打包linux:

bash 复制代码
flutter build linux --release
./build/linux/x64/release/bundle/frank_test

以上。

相关推荐
maaath6 分钟前
【maaath】Flutter for OpenHarmony打造跨平台便签备忘录应用
flutter·华为·harmonyos
剑神一笑12 分钟前
CSS Animation Timeline 可视化动画编辑器:从关键帧到流畅动画
前端·css·编辑器
千码君201614 分钟前
flutter:与Android Studio模拟器的调试分享
android·flutter
Dylan的码园15 分钟前
springBoot与Web后端基础
前端·spring boot·后端
广州华水科技15 分钟前
单北斗变形监测应用于水库的精准GNSS技术解析
前端
啊哈一半醒30 分钟前
React 核心知识点系统总结:从基础语法到高级 API,一篇文章梳理完整学习路线
javascript·学习·react.js
2401_878454531 小时前
HTML和CSS的复习2
前端·css·html
We་ct1 小时前
吃透现代CSS全技术体系
前端·css·css3·sass·postcss·预处理器
ZC跨境爬虫1 小时前
跟着 MDN 学 HTML day_11:(语义化容器全站重构+独立CSS拆分+字体合规引入)
前端·css·ui·重构·html·edge浏览器
xmdy58661 小时前
Flutter+开源鸿蒙实战|智联邻里Day8 Lottie动画集成+url_launcher跳转拨号+个人中心完善+全局UI统一
flutter·开源·harmonyos