计网实验一
2026/5/14 8:08:06
欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。### # Flutter 原生开发指南
Flutter 是由 Google 开发的开源 UI 软件开发工具包,用于构建高性能、高保真的跨平台应用程序。它采用 Dart 编程语言,并提供了丰富的组件库和工具,使开发者能够快速构建 iOS 和 Android 原生应用。Flutter 的独特之处在于其"一次编写,处处运行"的特性,同时又能保持接近原生应用的性能表现。
C:\src\flutter)运行以下命令检查环境配置:
flutter doctor常见问题解决方案:
flutter doctor --android-licensesmy_flutter_app/ ├── android/ - Android 原生代码和配置 │ ├── app/ - 主应用模块 │ └── build.gradle - 项目级构建配置 ├── ios/ - iOS 原生代码和配置 │ ├── Runner/ - Xcode 项目文件 │ └── Podfile - CocoaPods 依赖管理 ├── lib/ - Dart 源代码 │ └── main.dart - 应用入口文件 ├── test/ - 测试代码 ├── pubspec.yaml - 项目元数据和依赖管理 └── README.md - 项目文档Widget:
State 管理:
平台通道(Platform Channel):
| 类别 | 常用 Widget | 说明 |
|---|---|---|
| 布局 | Row, Column, Stack | 子元素排列方式 |
| 基础 | Text, Image, Icon | 基本显示元素 |
| 交互 | GestureDetector, InkWell | 用户交互处理 |
| 样式 | Container, Padding, DecoratedBox | 外观修饰 |
| 列表 | ListView, GridView | 滚动列表 |
import'package:flutter/material.dart';voidmain()=>runApp(MyApp());classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'Flutter Demo',theme:ThemeData(primarySwatch:Colors.blue,visualDensity:VisualDensity.adaptivePlatformDensity,),home:MyHomePage(title:'Flutter Demo Home Page'),);}}classMyHomePageextendsStatefulWidget{MyHomePage({Keykey,this.title}):super(key:key);finalStringtitle;@override_MyHomePageStatecreateState()=>_MyHomePageState();}class_MyHomePageStateextendsState<MyHomePage>{int _counter=0;void_incrementCounter(){setState((){_counter++;});}@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text(widget.title),),body:Center(child:Column(mainAxisAlignment:MainAxisAlignment.center,children:<Widget>[Text('You have pushed the button this many times:',),Text('$_counter',style:Theme.of(context).textTheme.headline4,),],),),floatingActionButton:FloatingActionButton(onPressed:_incrementCounter,tooltip:'Increment',child:Icon(Icons.add),),);}}使用 const 构造函数:
const Text('Hello')比Text('Hello')性能更好避免不必要的 Widget 重建:
拆分大型 build 方法:
使用 ListView.builder 替代 ListView:
ListView.builder(itemCount: 1000, itemBuilder: (ctx,i)=>ListItem(i))实现 itemExtent 提高滚动性能:
ListView.builder(itemExtent: 80,...)使用 AutomaticKeepAliveClientMixin 保持状态:
使用 AnimatedBuilder 分离动画逻辑:
AnimatedBuilder(animation:_animation,builder:(ctx,child)=>Transform.rotate(angle:_animation.value,child:child,),child:constIcon(Icons.refresh),)优先使用内置动画 Widget:
避免在动画期间执行复杂计算:
android/app/src/main/kotlin/.../MainActivity.kt中添加:importio.flutter.embedding.android.FlutterActivityimportio.flutter.embedding.engine.FlutterEngineimportio.flutter.plugin.common.MethodChannelclassMainActivity:FlutterActivity(){privatevalCHANNEL="samples.flutter.dev/battery"overridefunconfigureFlutterEngine(flutterEngine:FlutterEngine){super.configureFlutterEngine(flutterEngine)MethodChannel(flutterEngine.dartExecutor.binaryMessenger,CHANNEL).setMethodCallHandler{call,result->if(call.method=="getBatteryLevel"){valbatteryLevel=getBatteryLevel()if(batteryLevel!=-1){result.success(batteryLevel)}else{result.error("UNAVAILABLE","Battery level not available.",null)}}else{result.notImplemented()}}}privatefungetBatteryLevel():Int{return50// 简化示例,实际应从系统获取}}import'package:flutter/services.dart';constplatform=MethodChannel('samples.flutter.dev/battery');Future<String>getBatteryLevel()async{try{finalint result=awaitplatform.invokeMethod('getBatteryLevel');return'Battery level:$result%';}onPlatformExceptioncatch(e){return"Failed to get battery level: '${e.message}'.";}}ios/Runner/AppDelegate.swift中添加:importUIKitimportFlutter@UIApplicationMain@objcclassAppDelegate:FlutterAppDelegate{overridefuncapplication(_application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey:Any]?)->Bool{letcontroller:FlutterViewController=window?.rootViewControlleras!FlutterViewControllerletbatteryChannel=FlutterMethodChannel(name:"samples.flutter.dev/battery",binaryMessenger:controller.binaryMessenger)batteryChannel.setMethodCallHandler({(call:FlutterMethodCall,result:@escapingFlutterResult)->Voidinguardcall.method=="getBatteryLevel"else{result(FlutterMethodNotImplemented)return}self.receiveBatteryLevel(result:result)})GeneratedPluginRegistrant.register(with:self)returnsuper.application(application,didFinishLaunchingWithOptions:launchOptions)}privatefuncreceiveBatteryLevel(result:FlutterResult){letdevice=UIDevice.current device.isBatteryMonitoringEnabled=trueifdevice.batteryState==.unknown{result(FlutterError(code:"UNAVAILABLE",message:"Battery info unavailable",details:nil))}else{result(Int(device.batteryLevel*100))}}}单元测试:
Widget 测试:
集成测试:
android/app/build.gradle:android { defaultConfig { versionCode 1 versionName "1.0.0" } }keytool-genkey-v-keystore~/upload-keystore.jks-keyalgRSA-keysize2048-validity10000-aliasuploadandroid/key.propertiesandroid/app/build.gradleflutter build apk--releaseflutter build appbundle官方文档:
社区资源:
进阶学习:
通过系统学习和实践,开发者可以充分利用 Flutter 的强大功能,构建高质量的跨平台应用程序。
欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。