Flutter 从零到一

iOS 调试与开发工具指南

真机调试

  1. Xcode run 在控制台获取 Dart VM service URI
  2. VSCode 点击 Cmd + Shift + P 选择 Debug: Attach to Flutter on Device
  3. 粘贴 the URI 后点击 Enter

对于iOS开发者来说,使用appuploader这样的iOS开发助手可以简化真机调试的准备工作。appuploader提供了证书管理、设备UDID获取等功能,能帮助开发者快速完成调试环境的配置。

常见问题:Exception attempting to connect to the VM Service: SocketException: Connection refused

shell 复制代码
flutter devices
flutter attach -d <deviceId>

inspector

  1. VSCode 点击 Cmd + Shift + P 选择 Dart: Open DevTools in Browser
  2. select widget mode

通用地图

状态管理

Consumer
  • 监听Provider提供的数据,当在应用的某个地方使用Provider 来暴露一个数据模型时,你可以在widget树的任何其他地方使用 Consumer 来读取并响应这个数据模型的变化。
  • 当 Provider 中的数据发生变化时,Consumer 会自动重建其子widget,这样就可以根据新的数据状态更新UI。
Provider 数据更新后页面未刷新
  1. 没有调用 notifyListeners()
  2. context 不同 页面若取的是当前页面的 context 而不是管理 Provider 数据页面的 context 那无法拿到 Provider 数据
  3. 没有触发 set 方法 在方法中更新私有变量时直接调用的下划线方法 _unreadNum 而不是通过它的 setter 方法来更新的
  4. 没有改变引用

原生交互

dart 复制代码
// 原生代码   
FlutterMethodChannel *pushInitChannel = [FlutterMethodChannel methodChannelWithName:@"jd.logistic.pushInitChannel" binaryMessenger:controller.binaryMessenger];
[pushInitChannel invokeMethod:@"saveNotification" arguments:jsonString];
    
  
// flutter 代码
MethodChannel pushInitChannel = MethodChannel('jd.logistic.pushInitChannel');
pushInitChannel.setMethodCallHandler(_handleNativeMethod);

Future<void> _handleNativeMethod(MethodCall call) async {
    switch (call.method) {
      case 'saveNotification':
        String data = call.arguments;
        saveMessageToDatabase(data);
        break;
      default:
        print("Unknown method called");
    }
  }

国际化

VSCode 安装 flutter Intl 插件

特殊 UI

自动计算高度

GridView shrinkWrap

GridViewshrinkWrap 属性决定了是否根据子组件的总长度来调整 GridView 的长度。

dart 复制代码
GridView.builder(
  shrinkWrap: true,
)
AnimatedSize
dart 复制代码
Consumer<PackageTabWidgetViewModel>(builder: (BuildContext context, value, Widget? child) {
  return AnimatedSize(
    duration: Duration(milliseconds: 50),
    curve: Curves.easeInOut,
    child: value.model.selectedIndex == 0
        ? ReceivePackageList()
        : SendPackageList(),
  );
})

常见问题

  1. 新增本地图片后加载时报错 Unable to load asset
  1. Command PhaseScriptExecution failed with a nonzero exit code

清除 Flutter 应用的本地缓存 flutter pub cache clean

  1. 执行 flutter doctor 后报错 Xcode installation is incomplete
shell 复制代码
# 确保 Xcode 已正确配置
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
  1. Flutter 运行IOS真机,提示无法打开"iproxy"

在终端输入命令行 sudo xattr -d com.apple.quarantine ${flutter SDK iproxy 路径}

  1. Target of URI doesn't exist: 'package:xxx_image.dart'. Try creating the file referenced by the URI, or Try using a URI for a file that does exist.

执行 Flutter: Clean Project

  1. jaguar_serializer 数据解析报错
shell 复制代码
flutter packages pub run build_runner build --delete-conflicting-outputs --verbose

在iOS开发过程中,使用appuploader可以简化证书管理、设备注册等繁琐流程,让开发者能更专注于代码本身。它提供了可视化的操作界面,特别适合刚接触iOS开发的新手快速上手。

相关推荐
寻星探路4 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
王达舒19944 小时前
HTTP vs HTTPS: 终极解析,保护你的数据究竟有多重要?
网络协议·http·https
朱皮皮呀4 小时前
HTTPS的工作过程
网络协议·http·https
Binary-Jeff4 小时前
一文读懂 HTTPS 协议及其工作流程
网络协议·web安全·http·https
默默前行的虫虫11 小时前
解决EMQX WebSocket连接不稳定及优化WS配置提升稳定性?
websocket
那就回到过去12 小时前
MPLS多协议标签交换
网络·网络协议·hcip·mpls·ensp
大方子12 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha14 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络14 小时前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全