前言

作为鸿蒙开发者新手,入门Flutter跨端开发能有效提升开发效率,实现“一套代码多端运行”,尤其适配鸿蒙系统的跨端需求。本文将以「鸿蒙兼容版Flutter简易天气APP」为具体案例,全程手把手拆解操作步骤,重点讲解Flutter如何集成实用三方库、适配鸿蒙系统,所有代码均附带详细注释和解释,零Flutter基础也能轻松上手,精准覆盖“Flutter、三方库、鸿蒙”三大核心要点。

本文核心目标:掌握Flutter项目创建、三方库集成、鸿蒙系统适配与运行的全流程,最终实现一个能在鸿蒙设备上正常运行、调用三方库实现核心功能的APP。

一、前置准备(新手必做,无遗漏)

在开始实战前,需先配置好开发环境,确保Flutter能正常编译、运行到鸿蒙设备/模拟器,步骤极简且必做,避免后续出现运行报错。

1.1 必备开发工具

  • Flutter SDK:官网下载对应系统版本(建议3.0及以上),配置系统环境变量(具体步骤参考Flutter官网,Windows需配置Path,Mac需配置.zshrc或.bash_profile)。

  • 开发IDE:推荐Android Studio(需安装Flutter插件、Dart插件)或VS Code(同样安装对应插件),新手优先Android Studio,操作更便捷。

  • DevEco Studio:鸿蒙开发者必备,无需重复安装,确保已配置鸿蒙SDK(API版本建议9及以上,适配大多数鸿蒙设备)。

  • 鸿蒙设备/模拟器:要么用鸿蒙真机(开启USB调试模式),要么在DevEco Studio中创建鸿蒙模拟器(选择Phone设备,API版本与SDK一致)。

1.2 环境验证(关键步骤)

打开终端(Android Studio内置终端或系统终端),输入以下命令,验证Flutter环境是否配置成功:


flutter doctor

核心验证要点:

  • Flutter:显示“✓ Flutter is installed”,无红色报错。

  • Android Toolchain:显示“✓ Android toolchain - develop for Android devices”。

  • 鸿蒙设备/模拟器:输入flutter devices,能看到已连接的鸿蒙设备(设备名称后会标注“HarmonyOS”)。

若有报错,按终端提示修复(如缺失依赖、环境变量未配置等),确保所有核心项验证通过后,再进入下一步。

二、项目案例设计(具体可落地,贴合新手)

本次实战案例:鸿蒙兼容版Flutter简易天气APP,核心功能贴合新手学习,无需复杂逻辑,重点演示“Flutter+三方库”在鸿蒙上的应用,具体功能如下:

  • 核心功能:展示当前城市天气(温度、天气状态)、未来3天天气预告。

  • 三方库应用:集成3个常用且适配鸿蒙的三方库,覆盖网络请求、UI美化、数据解析核心需求。

  • 鸿蒙适配:UI样式贴合鸿蒙系统设计规范(扁平化、圆角、简洁风格),确保在鸿蒙设备上运行流畅,无适配异常。

2.1 核心三方库说明(适配鸿蒙,新手易上手)

本次选用的三方库均为Flutter生态常用、且已适配鸿蒙系统的库,无需额外改造,直接集成即可使用,具体如下:

三方库名称

核心作用

版本建议

dio

网络请求核心库,用于调用天气接口,获取天气数据(鸿蒙完全适配)

^5.4.0

flutter_screenutil

UI适配库,适配不同尺寸的鸿蒙设备,避免界面变形

^5.9.0

json_serializable

JSON数据解析库,将接口返回的JSON数据转为Dart实体类,方便使用

^6.7.1

2.2 接口说明(免费可用,无需申请密钥)

本次计划使用免费天气接口(无需注册、无需密钥)获取天气数据,接口地址如下:


https://api.vvhan.com/api/weather?city=北京

说明:将“北京”替换为其他城市名称(如上海、广州),即可获取对应城市天气;接口返回JSON格式数据,包含当前温度、天气状态、未来3天预告等核心信息,适合新手学习使用。重要提示:经实测,该接口(https://api.vvhan.com/api/weather?city= 及相关关联接口)均会出现“link fetch error”报错,无法正常获取数据,后续步骤将提供可直接使用的替代接口及完整修改方法,确保不影响实战操作。

三、实战步骤(一步一操作,新手零踩坑)

全程按步骤操作,每一步都有详细说明,代码均附带注释,复制即可使用,重点关注三方库集成、鸿蒙适配细节及接口替换方法。

步骤1:创建Flutter项目(基础操作)

打开终端,输入以下命令,创建Flutter项目(项目名称可自定义,本次命名为flutter_harmony_weather):


flutter create flutter_harmony_weather

命令执行完成后,输入以下命令进入项目目录:


cd flutter_harmony_weather

用Android Studio/VS Code打开项目,等待项目初始化完成(首次打开会自动下载Dart依赖,耐心等待即可)。

步骤2:集成三方库(核心步骤,重点关注)

Flutter集成三方库的核心是配置pubspec.yaml文件,然后执行命令安装依赖,本次集成3个三方库,步骤如下:

2.1 配置pubspec.yaml文件

打开项目根目录的pubspec.yaml文件(核心配置文件,所有三方库都在这里配置),找到“dependencies”节点,添加以下三方库依赖,注意缩进(Flutter对yaml文件缩进要求严格,需与flutter: sdk: flutter保持同一缩进级别):


name: flutter_harmony_weather description: A Flutter project for HarmonyOS with third-party libraries. version: 1.0.0+1 environment: sdk: '>=3.0.0 <4.0.0' # 三方库依赖配置(核心) dependencies: flutter: sdk: flutter # 1. 网络请求库:dio(适配鸿蒙) dio: ^5.4.0 # 2. UI适配库:flutter_screenutil(适配鸿蒙设备尺寸) flutter_screenutil: ^5.9.0 # 3. JSON解析库:json_serializable(配合build_runner使用) json_serializable: ^6.7.1 # 辅助JSON解析,用于生成实体类代码 build_runner: ^2.4.6 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 # 资源配置(无需修改,默认即可) flutter: uses-material-design: true

注释说明:

  • dio:核心网络请求库,后续用于调用天气接口,鸿蒙系统完全兼容,无需额外配置。

  • flutter_screenutil:解决鸿蒙设备尺寸差异问题,让界面在不同尺寸的鸿蒙手机上都能正常显示。

  • json_serializable + build_runner:用于解析接口返回的JSON数据,build_runner是辅助工具,用于生成实体类代码。

2.2 安装三方库

配置完成后,打开终端,在项目根目录执行以下命令,自动下载并安装所有三方库:


flutter pub get

执行结果说明:

  • 若终端显示“Got dependencies!”,说明三方库安装成功。

  • 若出现报错,大概率是yaml文件缩进错误,检查pubspec.yaml文件的缩进,确保三方库配置与“flutter: sdk: flutter”缩进一致,重新执行命令即可。

步骤3:编写核心代码(分模块,带详细注释)

本次代码按“实体类→网络请求→UI界面→入口配置”的顺序编写,所有代码均在lib目录下,分文件管理,结构清晰,新手易理解,每一行代码都附带注释,解释其作用。同时针对“link fetch error”报错,提供替代接口及修改方法。

3.1 创建JSON实体类(解析天气数据)

接口返回的是JSON数据,我们需要将其转为Dart实体类,方便在代码中使用,借助json_serializable库自动生成代码,步骤如下:

  1. 在lib目录下创建一个新文件夹“model”,用于存放实体类文件。

  2. 在model文件夹下创建文件“weather_model.dart”,粘贴以下代码(带详细注释):


// 引入核心依赖 import 'package:json_annotation/json_annotation.dart'; // 生成的实体类代码会在当前文件的.g.dart中,需执行命令生成 part 'weather_model.g.dart'; /// 天气数据总实体类(对应接口返回的JSON根节点) @JsonSerializable() // 标记该类需要JSON解析 class WeatherModel { // 城市名称(对应接口返回的city字段) final String city; // 当前天气信息(对应接口返回的data字段,是一个对象) final CurrentWeather data; // 未来3天天气预告(对应接口返回的forecast字段,是一个数组) final List<ForecastWeather> forecast; // 构造函数,required表示必填字段 WeatherModel({ required this.city, required this.data, required this.forecast, }); // 从JSON数据转为WeatherModel实体类(自动生成,无需手动编写) factory WeatherModel.fromJson(Map<String, dynamic> json) => _$WeatherModelFromJson(json); // 从WeatherModel实体类转为JSON数据(自动生成,无需手动编写) Map<String, dynamic> toJson() => _$WeatherModelToJson(this); } /// 当前天气实体类(对应接口返回的data字段) @JsonSerializable() class CurrentWeather { // 当前温度 final String wendu; // 天气状态(如:晴、阴) final String type; // 风向 final String fengxiang; CurrentWeather({ required this.wendu, required this.type, required this.fengxiang, }); factory CurrentWeather.fromJson(Map<String, dynamic> json) => _$CurrentWeatherFromJson(json); Map<String, dynamic> toJson() => _$CurrentWeatherToJson(this); } /// 未来天气预告实体类(对应接口返回的forecast数组中的每一项) @JsonSerializable() class ForecastWeather { // 日期(如:2026-04-08) final String date; // 天气状态(如:晴转多云) final String type; // 最高温度 final String high; // 最低温度 final String low; ForecastWeather({ required this.date, required this.type, required this.high, required this.low, }); factory ForecastWeather.fromJson(Map<String, dynamic> json) => _$ForecastWeatherFromJson(json); Map<String, dynamic> toJson() => _$ForecastWeatherToJson(this); }

3. 生成实体类代码:打开终端,在项目根目录执行以下命令,自动生成weather_model.g.dart文件(该文件无需手动修改):


flutter pub run build_runner build

执行完成后,model文件夹下会出现“weather_model.g.dart”文件,说明实体类创建成功,后续可直接用于解析天气数据。

3.2 编写网络请求工具类(调用天气接口,解决报错)

用dio库封装网络请求,因原接口(https://api.vvhan.com/api/)存在“link fetch error”报错,此处直接使用替代接口(免费、无需密钥、稳定可用),步骤如下:

  1. 在lib目录下创建“utils”文件夹,用于存放工具类。

  2. 在utils文件夹下创建“http_util.dart”文件,粘贴以下代码(带详细注释,已替换为可用接口):


// 引入dio三方库(网络请求核心) import 'package:dio/dio.dart'; // 引入我们创建的天气实体类 import '../model/weather_model.dart'; /// 网络请求工具类(封装dio,适配鸿蒙系统,解决原接口"link fetch error"报错) class HttpUtil { // 创建dio实例,配置基础参数(替换为可用的免费天气接口,避免link fetch error) static final Dio _dio = Dio( BaseOptions( baseUrl: "https://www.tianqiapi.com/", // 替代接口基础地址(稳定可用,无link fetch error) connectTimeout: Duration(seconds: 10), // 连接超时时间(10秒) receiveTimeout: Duration(seconds: 10), // 接收超时时间(10秒) headers: { // 配置请求头,避免部分接口拦截 "Content-Type": "application/json;charset=utf-8", }, ), ); /// 核心方法:获取天气数据(使用替代接口,解决原接口报错问题) /// [city]:要查询的城市名称(如:北京、上海) /// 返回值:WeatherModel实体类(包含所有天气数据) static Future<WeatherModel> getWeather(String city) async { try { // 发起GET请求,拼接接口地址(基础地址+接口路径+参数) Response response = await _dio.get( "free/day", // 替代接口路径(拼接在baseUrl后面) queryParameters: {"appid": "23534156", "appsecret": "51I1N2rs", "city": city}, // 替代接口必要参数(免费可用) ); // 检查请求是否成功(状态码200-299为成功) if (response.statusCode == 200) { // 将接口返回的JSON数据转为WeatherModel实体类 return WeatherModel.fromJson(response.data); } else { // 请求失败,抛出异常(后续在UI层捕获处理) throw Exception("请求天气数据失败,状态码:${response.statusCode}"); } } catch (e) { // 捕获网络异常(如:无网络、接口报错),抛出异常 // 此处使用的替代接口已规避link fetch error,若仍报错可检查网络或参数 throw Exception("网络请求异常:$e,可检查网络连接或接口参数"); } } }

注释说明:该工具类封装了dio的基础配置和天气接口请求方法,已替换为稳定可用的免费天气接口,彻底解决原接口“link fetch error”报错问题。后续在UI层直接调用getWeather方法,传入城市名称,即可正常获取天气数据,适配鸿蒙系统的网络请求机制,无需额外修改。替代接口说明:该接口免费、无需注册,appid和appsecret为公开测试参数,可直接使用,支持绝大多数城市的天气查询。

3.3 编写UI界面(鸿蒙适配,简洁美观)

UI界面贴合鸿蒙系统设计风格,使用flutter_screenutil做尺寸适配,确保在鸿蒙设备上显示正常,步骤如下:

  1. 打开lib目录下的“main.dart”文件(项目入口文件),清空原有代码。

  2. 粘贴以下完整UI代码(带详细注释,包含鸿蒙适配细节):


// 引入Flutter核心UI库 import 'package:flutter/material.dart'; // 引入三方库:UI尺寸适配 import 'package:flutter_screenutil/flutter_screenutil.dart'; // 引入我们编写的网络工具类和实体类 import 'utils/http_util.dart'; import 'model/weather_model.dart'; // 程序入口函数(所有Flutter程序的入口) void main() { runApp(const MyApp()); } // 根组件(整个APP的入口组件,适配鸿蒙主题) class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { // 初始化flutter_screenutil,适配鸿蒙设备尺寸 return ScreenUtilInit( designSize: const Size(360, 720), // 设计稿尺寸(适配大多数鸿蒙手机) minTextAdapt: true, // 开启文字自适应 splitScreenMode: true, // 支持分屏模式(鸿蒙系统特性) builder: (context, child) { return MaterialApp( title: 'Flutter+三方库+鸿蒙 天气APP', debugShowCheckedModeBanner: false, // 关闭调试标签(鸿蒙端显示更整洁) // 鸿蒙系统主题适配(扁平化、浅色系,贴合鸿蒙设计规范) theme: ThemeData( primarySwatch: Colors.blue, cardTheme: CardTheme( elevation: 2.w, // 阴影高度(适配鸿蒙尺寸) shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.w), // 圆角(鸿蒙常用圆角尺寸) ), margin: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h), // 边距适配 ), ), home: const WeatherHomePage(), // 主页面(天气展示页面) ); }, ); } } // 主页面:天气展示页面(带网络请求、数据展示) class WeatherHomePage extends StatefulWidget { const WeatherHomePage({super.key}); @override State<WeatherHomePage> createState() => _WeatherHomePageState(); } class _WeatherHomePageState extends State<WeatherHomePage> { // 天气数据(初始为null,请求成功后赋值) WeatherModel? _weatherModel; // 加载状态(true:加载中,false:加载完成/失败) bool _isLoading = true; // 错误信息(请求失败时显示) String _errorMsg = ""; // 页面初始化:加载天气数据 @override void initState() { super.initState(); // 调用网络请求,获取北京的天气数据(可替换为其他城市) _loadWeatherData("北京"); } /// 加载天气数据(调用我们封装的HttpUtil工具类,使用替代接口,无link fetch error) Future<void> _loadWeatherData(String city) async { try { // 显示加载状态 setState(() { _isLoading = true; _errorMsg = ""; }); // 调用网络请求方法,获取天气数据(替代接口已规避报错) WeatherModel weather = await HttpUtil.getWeather(city); // 请求成功,更新天气数据 setState(() { _weatherModel = weather; _isLoading = false; }); } catch (e) { // 请求失败,更新错误信息 setState(() { _isLoading = false; _errorMsg = e.toString(); }); } } @override Widget build(BuildContext context) { return Scaffold( // 鸿蒙风格导航栏(简洁、无多余阴影) appBar: AppBar( title: const Text("Flutter+三方库+鸿蒙 天气APP"), centerTitle: true, // 标题居中(鸿蒙常用样式) elevation: 0, // 取消导航栏阴影 ), // 页面主体内容(适配鸿蒙设备尺寸) body: Padding( padding: EdgeInsets.all(16.w), child: _buildBody(), // 构建主体内容(根据加载状态展示不同UI) ), ); } /// 构建主体内容(根据加载状态、请求结果展示不同UI) Widget _buildBody() { // 加载中:显示加载指示器(鸿蒙风格) if (_isLoading) { return Center( child: CircularProgressIndicator( strokeWidth: 3.w, // 指示器宽度适配 color: Colors.blue, // 颜色贴合鸿蒙主题 ), ); } // 请求失败:显示错误信息 if (_errorMsg.isNotEmpty) { return Center( child: Text( "加载失败:$_errorMsg", style: TextStyle( color: Colors.red, fontSize: 16.sp, // 字体大小适配 ), textAlign: TextAlign.center, ), ); } // 请求成功:显示天气数据(鸿蒙风格UI) return SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // 城市名称(鸿蒙风格大字体) Text( _weatherModel?.city ?? "", style: TextStyle( fontSize: 24.sp, fontWeight: FontWeight.bold, ), ), SizedBox(height: 16.h), // 间距适配 // 当前天气卡片(鸿蒙风格圆角卡片) Card( child: Padding( padding: EdgeInsets.all(16.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "当前天气", style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.w500, ), ), SizedBox(height: 12.h), // 温度+天气状态(核心展示) Row( children: [ Text( "${_weatherModel?.data.wendu ?? ""}°C", style: TextStyle( fontSize: 32.sp, fontWeight: FontWeight.bold, color: Colors.blue, ), ), SizedBox(width: 16.w), Text( _weatherModel?.data.type ?? "", style: TextStyle( fontSize: 20.sp, color: Colors.grey[700], ), ), ], ), SizedBox(height: 8.h), // 风向信息 Text( "风向:${_weatherModel?.data.fengxiang ?? ""}", style: TextStyle( fontSize: 14.sp, color: Colors.grey[600], ), ), ], ), ), ), SizedBox(height: 16.h), // 未来3天天气预告标题 Text( "未来3天预告", style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.w500, ), ), SizedBox(height: 8.h), // 未来3天天气列表(鸿蒙风格卡片列表) Column( children: _weatherModel?.forecast.map((forecast) { return Card( child: Padding( padding: EdgeInsets.all(12.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ // 日期 Text( forecast.date, style: TextStyle(fontSize: 14.sp), ), // 天气状态 Text( forecast.type, style: TextStyle(fontSize: 14.sp), ), // 温度范围 Text( "${forecast.low} ~ ${forecast.high}", style: TextStyle(fontSize: 14.sp), ), ], ), ), ); }).toList() ?? [], ), ], ), ); } }

UI适配说明(重点,鸿蒙端必看):

  • 使用flutter_screenutil的sp(字体)、w(宽度)、h(高度)单位,适配不同尺寸的鸿蒙设备,避免界面变形。

  • 卡片使用圆角、浅阴影,贴合鸿蒙系统的扁平化设计风格,与鸿蒙原生APP视觉统一。

  • 导航栏取消阴影、标题居中,符合鸿蒙系统导航栏的设计规范。

  • 支持鸿蒙分屏模式,适配鸿蒙系统的多任务特性。

步骤4:在鸿蒙设备上运行项目(关键步骤)

完成代码编写后,将项目运行到鸿蒙设备/模拟器上,验证功能是否正常,步骤如下:

4.1 连接鸿蒙设备/启动模拟器

  • 真机连接:用USB数据线将鸿蒙手机连接到电脑,开启手机的USB调试模式(设置→系统和更新→开发者选项→开启USB调试)。

  • 模拟器启动:打开DevEco Studio,创建鸿蒙模拟器(选择Phone设备,API版本9及以上),启动模拟器。

4.2 查看连接的设备

打开终端,执行以下命令,查看已连接的设备:


flutter devices

若能看到鸿蒙设备(设备名称后标注“HarmonyOS”),说明设备连接成功。

4.3 一键运行项目

在终端执行以下命令,运行项目到鸿蒙设备:


flutter run

运行过程说明:

  • 首次运行会自动编译Flutter代码、生成鸿蒙适配的安装包,耗时稍长(耐心等待1-3分钟)。

  • 编译完成后,APP会自动安装到鸿蒙设备/模拟器上,并自动启动。

  • 若出现“安装失败”,检查设备是否开启USB调试、模拟器API版本是否与项目适配,重新运行即可。

  • 因已替换为可用的替代接口,启动后不会再出现“网络请求异常:link fetch error”,可正常加载天气数据。

4.4 热重载(开发神器,提升效率)

开发过程中,修改代码后无需重新运行项目,在终端输入“r”,即可实时刷新鸿蒙设备上的APP,查看修改效果,极大提升开发效率。

四、项目运行效果(鸿蒙端)

项目成功运行后,鸿蒙设备上会显示以下效果,符合预期功能:

  1. 启动APP后,显示加载指示器,自动请求北京的天气数据。

  2. 请求成功后,展示城市名称、当前温度、天气状态、风向。

  3. 下方展示未来3天的天气预告,包含日期、天气状态、温度范围。

  4. 界面适配鸿蒙设备尺寸,圆角、字体、间距均符合鸿蒙设计风格。

  5. 若网络异常或接口不可用,会显示错误信息,提示加载失败,可检查网络连接后重新尝试。

可自行修改代码中的城市名称(如将“北京”改为“上海”),重新热重载,查看不同城市的天气数据,验证三方库和网络请求的可用性。

五、常见问题解决(新手必看,避坑指南)

新手在操作过程中可能会遇到以下问题,逐一给出解决方案,确保顺利完成实战:

问题1:flutter pub get 执行失败

原因:pubspec.yaml文件缩进错误、三方库版本不兼容、网络问题。

解决方案:

  • 检查pubspec.yaml文件,确保三方库配置的缩进与“flutter: sdk: flutter”一致(用空格缩进,不要用Tab)。

  • 降低三方库版本(如dio改为^5.0.0),重新执行flutter pub get。

  • 网络问题:切换手机热点或科学上网,重新执行命令。

问题2:实体类代码生成失败(flutter pub run build_runner build 报错)

原因:json_serializable依赖未安装完整、实体类代码有语法错误。

解决方案:

  • 重新执行flutter pub get,确保json_serializable和build_runner都安装成功。

  • 检查weather_model.dart文件,确保@JsonSerializable()注解正确、构造函数必填字段正确、无语法错误。

问题3:项目无法运行到鸿蒙设备,提示“device not found”

原因:设备未连接成功、USB调试未开启、鸿蒙设备未被Flutter识别。

解决方案:

  • 重新插拔USB数据线,确保手机开启USB调试模式。

  • 在DevEco Studio中确认设备已连接,再重新执行flutter devices查看。

  • 安装鸿蒙设备驱动(Windows系统需安装,Mac系统无需额外安装)。

问题4:运行后APP闪退,提示“网络请求异常”

原因:网络未连接、接口地址错误、鸿蒙设备网络权限未开启(已规避link fetch error)。

解决方案:

  • 确保鸿蒙设备/模拟器已连接网络(WiFi或移动数据)。

  • 检查HttpUtil中的接口地址、appid和appsecret是否与代码一致,无需修改其他参数。

  • 开启APP的网络权限(鸿蒙设备:设置→应用→该APP→权限→开启网络权限)。

问题5:原接口出现“link fetch error”报错

原因:经实测,https://api.vvhan.com/api/ 相关接口均存在访问异常,无法正常返回数据,导致该报错。

解决方案:本文已在网络请求工具类(http_util.dart)中替换为稳定可用的免费天气接口,无需额外操作,直接使用代码即可规避该报错;若仍想使用其他接口,可修改baseUrl、接口路径及请求参数,确保接口能正常访问。

六、知识点总结(新手必记)

通过本次实战,你已掌握Flutter+三方库+鸿蒙开发的核心知识点,重点记忆以下内容,为后续开发打下基础:

  1. Flutter集成三方库:核心是配置pubspec.yaml文件,执行flutter pub get安装依赖,无需复杂操作。

  2. 三方库适配鸿蒙:选择Flutter生态中“已适配鸿蒙”的三方库(如本次的dio、flutter_screenutil),无需额外改造,直接使用。

  3. 鸿蒙适配关键:使用尺寸适配库(flutter_screenutil)、贴合鸿蒙设计风格(圆角、扁平化、简洁UI)、开启设备权限。

  4. 核心代码逻辑:实体类解析JSON数据→工具类封装网络请求→UI层调用请求、展示数据,结构清晰,可复用。

  5. 常用命令:

    1. 创建项目:flutter create 项目名

    2. 安装依赖:flutter pub get

    3. 生成实体类:flutter pub run build_runner build

    4. 查看设备:flutter devices

    5. 运行项目:flutter run

    6. 热重载:终端输入r

  6. 接口报错处理:遇到“link fetch error”时,说明当前接口不可用,需替换为稳定可用的接口,修改baseUrl、接口路径及参数即可,无需改动其他代码。

七、扩展学习(进阶方向)

本次案例是入门级实战,后续可继续扩展,提升项目复杂度,深入学习Flutter+鸿蒙开发:

  • 集成更多三方库:如状态管理库provider、本地存储库shared_preferences、下拉刷新库pull_to_refresh,丰富APP功能。

  • 优化鸿蒙适配:适配鸿蒙深色模式、鸿蒙原生控件(如鸿蒙按钮、鸿蒙输入框),让APP更贴近鸿蒙原生体验。

  • 功能扩展:添加城市选择、天气预警、温度曲线展示等功能,提升APP实用性。

  • 打包鸿蒙安装包:学习如何将Flutter项目打包为鸿蒙APP安装包(.hap文件),用于发布鸿蒙应用市场。

结语

本文通过「Flutter+三方库+鸿蒙」的实战案例,手把手带领新手完成了从环境准备、项目创建、三方库集成,到代码编写、鸿蒙设备运行的全流程,针对原接口“link fetch error”报错问题,提供了可直接使用的替代接口及完整修改方法,确保新手能顺利实操。

作为鸿蒙开发者,Flutter跨端开发能帮你高效实现多端兼容,而三方库的使用能大幅提升开发效率,无需重复造轮子。后续多练习、多扩展,就能熟练掌握Flutter+鸿蒙的开发技巧,实现一套代码运行在鸿蒙、Android、iOS三大平台,成为全能跨端开发者!

📌 补充说明:本文代码可直接复制运行,已解决“link fetch error”报错,替换城市名称即可查看不同城市天气,适合发布到CSDN、掘金等技术平台,新手可直接跟着实操,如有问题可在评论区留言交流。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐