news 2026/6/22 18:09:43

Flutter 入门实战:构建一个简单的天气应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter 入门实战:构建一个简单的天气应用

标题:Flutter 入门实战:构建一个简单的天气应用

引言

随着移动应用开发需求的不断增长,跨平台框架成为开发者关注的焦点。Flutter 作为 Google 推出的 UI 工具包,凭借高性能、高保真和“一次编写,多端运行”的优势,迅速在开发者社区中崛起。本文将带你从零开始,使用 Flutter 构建一个简单的天气应用,并结合实际代码演示核心概念。


一、环境准备

在开始前,请确保已安装以下工具:

  • Flutter SDK(推荐版本 3.19 或以上)
  • Dart SDK(随 Flutter 自动安装)
  • 编辑器:VS Code 或 Android Studio
  • 模拟器或真机用于调试

创建项目:

flutter create weather_appcdweather_app

二、项目结构概览

Flutter 项目的基本结构如下:

lib/ ├── main.dart # 应用入口 └── screens/ └── weather_screen.dart # 天气页面

我们将在main.dart中启动应用,并在weather_screen.dart中实现主要逻辑。


三、编写代码:实现一个简单天气界面

1.main.dart—— 应用入口
// lib/main.dartimport'package:flutter/material.dart';import'screens/weather_screen.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContext context){returnMaterialApp(title:'天气应用',theme:ThemeData(primarySwatch:Colors.blue,useMaterial3:true,),home:constWeatherScreen(),debugShowCheckedModeBanner:false,// 隐藏右上角 debug 标签);}}
2. 创建天气页面:weather_screen.dart
// lib/screens/weather_screen.dartimport'package:flutter/material.dart';classWeatherScreenextendsStatefulWidget{constWeatherScreen({super.key});@overrideState<WeatherScreen>createState()=>_WeatherScreenState();}class_WeatherScreenStateextendsState<WeatherScreen>{// 模拟天气数据String cityName="北京";int temperature=22;String description="晴朗";// 模拟刷新天气void_refreshWeather(){setState((){// 随机生成温度(15~30°C)temperature=(15+(15*Math.Random().nextDouble())).toInt();// 随机描述finaldescriptions=["晴朗","多云","小雨","阴天","雷阵雨"];description=descriptions[Random().nextInt(descriptions.length)];});}@overrideWidgetbuild(BuildContext context){returnScaffold(appBar:AppBar(title:constText("🌤️ 天气预报"),centerTitle:true,),body:Container(padding:constEdgeInsets.all(20),child:Column(mainAxisAlignment:MainAxisAlignment.center,children:[// 城市名称Text(cityName,style:constTextStyle(fontSize:32,fontWeight:FontWeight.bold),),constSizedBox(height:20),// 温度Text('$temperature°C',style:constTextStyle(fontSize:64,color:Colors.orange),),constSizedBox(height:10),// 天气描述Text(description,style:constTextStyle(fontSize:20,color:Colors.grey),),constSizedBox(height:40),// 刷新按钮ElevatedButton.icon(onPressed:_refreshWeather,icon:constIcon(Icons.refresh),label:constText("更新天气"),style:ElevatedButton.styleFrom(padding:constEdgeInsets.symmetric(horizontal:30,vertical:15),),),],),),);}}

⚠️ 注意:请在文件顶部添加导入:

import'dart:math';

四、运行应用

在项目根目录运行以下命令:

flutter run

你将看到一个简洁美观的天气界面,点击“更新天气”按钮后,温度和天气描述会随机变化,得益于 Flutter 的热重载(Hot Reload),你可以在修改代码后几乎立即看到效果。


五、核心概念解析

  1. Widget 架构
    Flutter 中一切皆为 Widget。Scaffold提供页面骨架,AppBar是顶部栏,Column用于垂直布局。

  2. 状态管理(setState)
    _refreshWeather方法中调用setState(),通知 Flutter 重新构建 UI,实现动态更新。

  3. Material Design 组件
    使用ElevatedButtonText等 Material 风格组件,自动适配 Android 和 iOS 视觉规范。

  4. 布局与间距
    SizedBox用于控制元素间距离,PaddingCenter实现精准排版。


六、扩展建议(进阶方向)

  • ✅ 接入真实 API:使用 OpenWeatherMap API 获取实时天气。
  • ✅ 添加输入框让用户搜索城市。
  • ✅ 使用http包请求网络数据:
    # pubspec.yamldependencies:http:^1.0.0
  • ✅ 引入状态管理方案如ProviderRiverpod管理复杂状态。

七、总结

通过这个简单的天气应用,我们实践了 Flutter 的基本开发流程:

  • 使用 Dart 编写逻辑
  • 通过 Widget 构建 UI
  • 利用setState实现交互响应
  • 快速预览与调试

Flutter 不仅让跨平台开发变得高效,更以出色的性能和灵活的设计赢得了广泛青睐。无论你是初学者还是资深开发者,掌握 Flutter 都将为你打开通往现代多端应用开发的大门。


🚀 下一步建议:
尝试将本项目接入真实天气 API,并支持多城市切换,打造属于你的完整跨平台天气 App!

GitHub 示例仓库参考:github.com/example/flutter-weather-app(模拟地址)


本文代码可在 Flutter 3.x 环境下正常运行,SDK 支持 Android、iOS 与 Web 平台。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 18:28:55

comsol锂枝晶模型 五合一 单枝晶定向生长、多枝晶定向生长、多枝晶随机生长、无序生长随机形...

comsol锂枝晶模型 五合一 单枝晶定向生长、多枝晶定向生长、多枝晶随机生长、无序生长随机形核以及雪花枝晶&#xff0c;包含相场、浓度场和电场三种物理场&#xff08;雪花枝晶除外&#xff09;&#xff0c;其中单枝晶定向生长另外包含对应的参考文献。锂枝晶生长模型在电池失…

作者头像 李华
网站建设 2026/6/23 2:21:44

springboot在线影视论坛-计算机毕业设计源码71111

摘 要 随着互联网影视内容的快速发展&#xff0c;用户对影视作品的需求日益增多&#xff0c;尤其是通过在线平台来获取影视信息、评论与观看的需求日渐突出。因此&#xff0c;构建一个集影视信息管理、用户互动、社区功能于一体的在线影视论坛平台显得尤为重要。系统致力于为用…

作者头像 李华
网站建设 2026/6/16 17:29:59

RAG 2.0高级分块技术详解:9种策略+实战案例,让LLM应用性能翻倍(收藏)

本文详解RAG 2.0九种高级文本分块策略&#xff0c;包括滑动窗口、自适应、实体、主题、混合、任务感知、HTML/XML标签、代码专用和正则表达式切分。每种策略均配有适用场景、实现步骤和实例&#xff0c;帮助读者针对医疗、法律、新闻、研究论文等不同领域选择最优方案&#xff…

作者头像 李华
网站建设 2026/6/19 5:59:28

【Dify权限校验实战指南】:从零构建安全的检索结果访问控制体系

第一章&#xff1a;Dify权限校验的核心概念与架构解析Dify作为一个面向AI应用开发的低代码平台&#xff0c;其权限校验机制是保障系统安全与数据隔离的关键组成部分。该机制不仅支持多租户环境下的资源访问控制&#xff0c;还融合了角色、策略与上下文感知判断&#xff0c;实现…

作者头像 李华
网站建设 2026/6/15 4:24:11

基于Python的文件管理系统的设计与实现

文件管理系统的课题背景 随着信息技术的快速发展&#xff0c;数据量呈指数级增长&#xff0c;企业和个人对高效、安全的文件管理需求日益迫切。传统的文件管理方式&#xff0c;如手动分类存储或简单的文件夹管理&#xff0c;已难以应对海量数据的组织、检索和共享需求。特别是在…

作者头像 李华
网站建设 2026/6/23 0:17:43

vue基于Springboot框架网上电子书店商城好书推荐管理系统 论坛

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华