当前位置: 首页 > article >正文

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

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍创建BMI计算器应用并添加依赖和打包。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

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

😏1. BMI计算器示例

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

main.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});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});Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('frank_test'),),body: SingleChildScrollView(child: Column(children: const [TimeDisplayScreen(),BMICalculator(),],),),);}
}

time_display.dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'dart:async';class TimeDisplayScreen extends StatefulWidget {const TimeDisplayScreen({super.key});State<TimeDisplayScreen> createState() => _TimeDisplayScreenState();
}class _TimeDisplayScreenState extends State<TimeDisplayScreen> {String _currentTime = '';late Timer _timer;void initState() {super.initState();_updateTime();_timer = Timer.periodic(const Duration(seconds: 1), (timer) {_updateTime();});}void dispose() {_timer.cancel();super.dispose();}void _updateTime() {setState(() {_currentTime = DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now());});}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

import 'package:flutter/material.dart';class BMICalculator extends StatefulWidget {const BMICalculator({super.key});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 = '肥胖';}}void dispose() {_heightController.dispose();_weightController.dispose();super.dispose();}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文件中添加:

dependencies:flutter:sdk: flutterintl: ^0.18.1

😆3. 应用打包

打包web:

flutter build web --release
# 运行
cd build/web
python3 -m http.server 8000

打包linux:

flutter build linux --release
./build/linux/x64/release/bundle/frank_test

请添加图片描述

以上。

http://www.lryc.cn/news/2386368.html

相关文章:

  • 【Linux 学习计划】-- 倒计时、进度条小程序
  • 微服务的应用案例
  • 后端开发概念
  • 2025网络安全趋势报告 内容摘要
  • 云原生安全基石:深度解析HTTPS协议(从原理到实战)
  • Autodl训练Faster-RCNN网络--自己的数据集(一)
  • python打卡day36
  • 8.Java 8 日期时间处理:从 Date 的崩溃到 LocalDate 的优雅自救​
  • 基于Python的全卷积网络(FCN)实现路径损耗预测
  • 【ubuntu】安装NVIDIA Container Toolkit
  • Paimon和Hive相集成
  • 精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践
  • HarmonyOS 鸿蒙应用开发进阶:深入理解鸿蒙跨设备互通机制
  • Vue.js教学第十五章:深入解析Webpack与Vue项目实战
  • 深入浅出 Python Testcontainers:用容器优雅地编写集成测试
  • Cmake编译gflags过程记录和在QT中测试
  • 项目中Warmup耗时高该如何操作处理
  • 制作一款打飞机游戏53:子弹样式
  • Windows磁盘无法格式化及磁盘管理
  • 每日算法 -【Swift 算法】Z 字形变换(Zigzag Conversion)详解与实现
  • Docker运维-5.3 配置私有仓库(Harbor)
  • day 36
  • mybatis-plus使用记录
  • Mcu_Bsdiff_Upgrade
  • 有监督学习——决策树
  • 华为OD机试真题——启动多任务排序(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • AWS云与第三方通信最佳实践:安全、高效的数据交互方案
  • Ubuntu Server 24 设置 WiFi 网络的方案
  • 【redis】redis和hiredis的基本使用
  • 大模型时代,Python 近红外光谱与 Transformer 模型:学习的必要性探究