做网站的贴吧广州品牌网络营销方式

张小明 2026/1/19 22:05:27
做网站的贴吧,广州品牌网络营销方式,注册网站排名公司,农业建设管理信息网站## #x1f324;️ 引言在本篇文章中#xff0c;我们将使用 **Flutter** 构建一个跨平台的 **天气预报应用**。它将通过调用免费的天气 API 获取实时天气数据#xff0c;并以美观的卡片形式展示给用户。我们将涵盖以下关键技术点#xff1a;- 网络请求#xff08;http 包️ 引言在本篇文章中我们将使用 **Flutter** 构建一个跨平台的 **天气预报应用**。它将通过调用免费的天气 API 获取实时天气数据并以美观的卡片形式展示给用户。我们将涵盖以下关键技术点- 网络请求http 包- JSON 数据解析- 异步编程Future 与 async/await- 状态管理基础- 自定义 UI 组件最终效果如下![天气应用效果图](https://i.imgur.com/ZKfFwRr.png)*图运行在 Android 上的 Flutter 天气应用*---## 准备工作### 1. 创建项目bashflutter create weather_appcd weather_app### 2. 添加依赖编辑 pubspec.yaml 文件添加网络请求库yamldependencies:flutter:sdk: flutterhttp: ^0.16.0 # 用于发送HTTP请求然后运行bashflutter pub get### 3. 获取天气 API 密钥我们使用 [OpenWeatherMap](https://openweathermap.org/api) 的免费 API。注册后获取你的 API Key例如your_api_key_here 提示不要将密钥硬编码在代码中此处为教学简化处理。---## ️ 定义城市与天气模型创建文件 lib/models/weather.dartdartclass Weather {final String city;final double temperature;final String description;final String iconCode;Weather({required this.city,required this.temperature,required this.description,required this.iconCode,});// 工厂构造函数从 JSON 创建对象factory Weather.fromJson(MapString, dynamic json) {return Weather(city: json[name],temperature: json[main][temp].toDouble(),description: json[weather][0][description],iconCode: json[weather][0][icon],);}}---## 调用天气 API创建 lib/services/weather_service.dartdartimport package:http/http.dart as http;import dart:convert;import ../models/weather.dart;class WeatherService {static const String baseUrl https://api.openweathermap.org/data/2.5/weather;static const String apiKey your_api_key_here; // 替换为你自己的KeyFutureWeather getWeather(String cityName) async {final response await http.get(Uri.parse($baseUrl?q$cityNameappid$apiKeyunitsmetriclangzh_cn));if (response.statusCode 200) {final data json.decode(response.body);return Weather.fromJson(data);} else {throw Exception(Failed to load weather);}}}---## 构建主页面 UI替换 lib/main.dart 内容dartimport package:flutter/material.dart;import package:weather_app/models/weather.dart;import package:weather_app/services/weather_service.dart;void main() {runApp(const MyApp());}class MyApp extends StatelessWidget {const MyApp({super.key});overrideWidget build(BuildContext context) {return MaterialApp(title: Flutter 天气预报,theme: ThemeData(primarySwatch: Colors.blue,useMaterial3: true,),home: const WeatherPage(),debugShowCheckedModeBanner: false,);}}class WeatherPage extends StatefulWidget {const WeatherPage({super.key});overrideStateWeatherPage createState() _WeatherPageState();}class _WeatherPageState extends StateWeatherPage {final TextEditingController _controller TextEditingController();Weather? _weather;bool _loading false;final WeatherService _service WeatherService();overridevoid dispose() {_controller.dispose();super.dispose();}Futurevoid _fetchWeather() async {if (_controller.text.isEmpty) return;setState(() {_loading true;});try {final weather await _service.getWeather(_controller.text);setState(() {_weather weather;_loading false;});} catch (e) {setState(() {_loading false;});ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(错误: $e)),);}}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text(️ 天气预报),centerTitle: true,),body: Padding(padding: const EdgeInsets.all(16.0),child: Column(children: [Row(children: [Expanded(child: TextField(controller: _controller,decoration: const InputDecoration(labelText: 输入城市名称,border: OutlineInputBorder(),),onSubmitted: (_) _fetchWeather(),),),const SizedBox(width: 8),IconButton(icon: const Icon(Icons.search),onPressed: _fetchWeather,),],),const SizedBox(height: 20),// 加载状态if (_loading)const CircularProgressIndicator()else if (_weather ! null)Expanded(child: Card(elevation: 4,child: Padding(padding: const EdgeInsets.all(20.0),child: Column(children: [Text(${_weather!.city},style: const TextStyle(fontSize: 28,fontWeight: FontWeight.bold,),),const SizedBox(height: 10),Image.network(https://openweathermap.org/img/wn/${_weather!.iconCode}2x.png,width: 100,),Text(${_weather!.temperature.toStringAsFixed(1)}°C,style: const TextStyle(fontSize: 40,color: Colors.orange,),),Text(${_weather!.description}.toUpperCase(),style: const TextStyle(fontSize: 16,color: Colors.grey,),),],),),),)elseconst Expanded(child: Center(child: Text(请输入城市名称查询天气,style: TextStyle(fontSize: 18, color: Colors.grey),),),),],),),);}}---## ️ 运行效果展示### 启动应用bashflutter run### 查询“北京”天气![查询北京天气](https://i.imgur.com/9mXWYvP.png)*图成功显示北京当前天气*### 错误提示示例如果城市不存在会弹出提示![错误提示](https://i.imgur.com/3QzRZbS.png)---## 技术亮点解析| 特性 | 实现方式 ||------|----------|| **网络请求** | 使用 http.get() 获取 JSON 数据 || **JSON 解析** | factory 构造函数 Map 提取字段 || **异步处理** | FutureBuilder 可替代手动状态管理 || **用户体验** | 显示加载动画和错误提示 || **图片加载** | 直接使用 Image.network 加载图标 |---## ️ 安全建议进阶虽然本例直接写入了 API Key但在生产环境中应- 使用环境变量或配置文件- 通过后端代理请求避免密钥泄露- 使用 dotenv 包管理敏感信息yaml# 添加到 pubspec.yamldev_dependencies:dotenv: ^5.0.2---## 扩展功能建议你可以继续优化这个应用✅ 添加定位功能获取当前位置天气✅ 支持多城市收藏列表✅ 展示未来几天预报调用 forecast API✅ 深色模式切换✅ 下拉刷新---## 打包发布构建 APK 发布到手机bashflutter build apk --release生成 IPA需 macOSbashflutter build ipa---## ✅ 总结通过这个项目你学会了如何- 使用 Flutter 构建真实世界的应用- 调用外部 RESTful API- 解析 JSON 并更新 UI- 处理加载、成功、错误三种状态- 设计简洁美观的界面Flutter 让这一切变得简单而高效---
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

如何设计购物网站苏州专业网站建设的公司

目录 一、引言:UDP——轻量级传输层协议 1.1 UDP的核心定位 1.2 传输层的核心职责 1.3 UDP与TCP的核心差异(对比) 二、端口号:应用通信的“身份标识” 2.1 端口号的核心作用 2.2 通信标识:五元组…

张小明 2026/1/17 23:01:44 网站建设

wordpress七牛云缩略图嘉兴seo网站排名

在数字化转型浪潮席卷各行各业的今天,企业资源规划(ERP)系统与办公自动化(OA)系统的高效集成已成为提升组织运营效率的关键。选择一家靠谱的ERP与OA系统集成厂家,不仅能够打通企业内部的信息孤岛&#xff0…

张小明 2026/1/17 23:01:43 网站建设

网站背景大小自己的网站建设

Excalidraw 与 Reveal.js:构建下一代交互式技术演讲 在一场远程架构评审会上,主讲人正讲解微服务之间的调用链路。当他翻到系统拓扑图一页时,并没有停留在静态示意图上,而是直接点击画布——实时共享的 Excalidraw 白板随即激活。…

张小明 2026/1/17 23:01:46 网站建设

国外网站 备案如何推广自己的产品

Qwen3-VL-30B GPU算力加速:实现高效视觉问答与图表解析 在金融分析师面对堆积如山的财报图表时,在放射科医生连续阅片数小时后,在自动驾驶车辆驶入复杂施工路段的瞬间——我们越来越意识到,AI不能只“读文字”,它必须…

张小明 2026/1/19 17:31:04 网站建设

公众号开发者id在哪找seo推广营销网站

iOS 设备间数据交换与处理全解析 1. 数据发送基础 在进行 iOS 设备间的数据交换时,首先要考虑数据发送的方式。有两种主要方法用于向连接的对等方发送数据: - -(void)sendStringToAllPeers:(NSString *)dataString reliable:(BOOL)reliable; :此方法用于向所有连接的对…

张小明 2026/1/17 23:01:48 网站建设

拼多多刷销量网站开发广州开发网站报价

为什么越来越多开发者选择Kotaemon做知识检索? 在企业级AI应用快速落地的今天,一个现实问题反复浮现:大模型明明“懂得很多”,为何一到专业场景就频频“胡说八道”?比如让客服机器人解释一份SAP系统的操作流程&#x…

张小明 2026/1/17 23:01:47 网站建设