flutter踩坑记录

2,451 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情 

1. IOS模拟器无法正常启动。

具体的错误没记录,大概就是cocoapods无法安装。尝试了一下的解决方法:

a. 给Podfile增加配置

source 'https://github.com/CocoaPods/Specs.git'

失败了,无法连接连接github.com

Resolving dependencies of `Podfile`
CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only performed in repo update
    [!] Couldn't determine repo type for URL: `https://github.com/CocoaPods/Specs.git`: Net::OpenTimeout

b. 删除 trunk 目录,重试测试,还是失败一样的问题。

rm -fr ~/.cocoapods/repos/trunk

c. 编辑hosts文件,增加内容:

199.232.4.133    raw.githubusercontent.com

还是不行。

我的解决办法:

最后给控制台挂代理可以访问了。注意:pod install结束以后,要给代理删掉,要不然flutter无法启动。

2. 错误提示:If you do NOT see the Flutter application running, it might have crashed. The device logs (e.g. from adb or XCode) might have more details.

╰─○ flutter run                                                                                                
Launching lib/main.dart on iPhone 13 in debug mode...
Running pod install...                                             14.8s
Running Xcode build...                                                  
 └─Compiling, linking and signing...                         7.9s
Xcode build done.                                           67.2s
vm-service: Error: Unhandled exception:
WebSocketException: Invalid WebSocket upgrade request
[VERBOSE-2:dart_isolate.cc(1098)] Unhandled exception:
WebSocketException: Invalid WebSocket upgrade request
Connecting to the VM Service is taking longer than expected...
Still attempting to connect to the VM Service...
If you do NOT see the Flutter application running, it might have crashed. The device logs (e.g. from adb or XCode) might have more details.
If you do see the Flutter application running on the device, try re-running with --host-vmservice-port to use a specific port known to be available.

我的解决办法:把代理删除。

3.错误提示: Error: Couldn't resolve the package 'flutter_localizations' in 'package:flutter_localizations/flutter_localizations.dart'.

我的解决办法:在dependencies中引入flutter_localizations。

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

4. 错误提示:Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found

Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found
/Volumes/data/DevelopmentTool/flutter2/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter_wkwebview-2.7.5/ios/Classes/FWFWebViewConfigurationHostApi.h:4:8


Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found
/Volumes/data/DevelopmentTool/flutter2/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter_wkwebview-2.7.5/ios/Classes/FlutterWebView.h:4:8


Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found
/Volumes/data/DevelopmentTool/flutter2/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter_wkwebview-2.7.5/ios/Classes/FWFUserContentControllerHostApi.h:4:8


Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found
/Volumes/data/DevelopmentTool/flutter2/.pub-cache/hosted/pub.flutter-io.cn/webview_flutter_wkwebview-2.7.5/ios/Classes/FWFUIViewHostApi.h:4:8

尝试了这个办法处理,没能解决。

  1. flutter clean
  2. 删除iOS目录下: / Flutter / Flutter.framework 、Pods文件夹、Podfile.lock、Runner.xcworkspace
  3. flutter pub get
  4. cd ios
  5. pod install
  6. flutter run

错误提示:Your project does not explicitly specify the CocoaPods master specs repo. Since CDN is now used as the default, you may safely remove it from your repos directory via pod repo remove master. To suppress this warning please add warn_for_unused_master_specs_repo => false to your Podfile.

解决办法:

错误提示setState() or markNeedsBuild() called during build. 

大概意思是说在构建视图的时候,还没有完成视图的构建,调用了setState或者markNeedsBuild方法。这是不允许的。这个错误需要仔细检查代码,一般是状态处理出了问题。 如果需要在initState的时候使用某一个组件,那么需要等父组件创建完成后,再去创建小组件。

网上看到一个方法,测试不好用。

Future.delayed(Duration(milliseconds: 200)).then((e) {
  setState(() {
    if(_userName == ''){
      Navigator.push(context, MaterialPageRoute(builder: (_) {
        return new LoginPage();
      })
                    );};
  });
});

解决办法:使用组件创建完成的回调,或者使用延时构建。

  • 回调
WidgetsBinding.instance.addPostFrameCallback((_) {
  //需要创建的小组件  
});
  • 延时加载:
Builder(
  builder: (context) {
    Future.delayed(
      Duration(milliseconds: 200));
    return Obx(
      () => Text(
        "${controller.phoneIndex.value + 1}/${controller.phoneTotal.value}",
        style: const TextStyle(
          fontSize: 20,
        ),
      ),
    );
  },
),

错误提示:Bad state: No element

这个错误出现的原因也比较多,我的情况是希望在一个集合中,查找属性label等于我传入值的内容,使用了dart的where语句

_systemDict.where((e) => e?.label == label).first

当集合里没有label相同的元素的时候,会报错,说No element

======== Exception caught by scheduler library =====================================================
The following StateError was thrown during a scheduler callback:
Bad state: No element

When the exception was thrown, this was the stack: 
I/flutter ( 2611): ** Instance "DictStore" has been initialized. isError: [false]
#0      Iterable.first (dart:core/iterable.dart:624:7)
#1      SettingsStore.getSettingsByLabel (package:order_manager_flutter/common/store/settings.dart:38:56)
#2      MyApp.build.<anonymous closure>.<anonymous closure> (package:order_manager_flutter/main.dart:69:48)
#3      GetMaterialApp.build.<anonymous closure>.<anonymous closure> (package:get/get_navigation/src/root/get_material_app.dart:199:20)
#4      SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#5      SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1089:9)
#6      SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:862:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

发现where在没有发现内容的时候,在调用first就会出这个问题,后来使用firstWhere解决,firstWhere支持第二个参数,指定一个找不到时的返回内容。

_systemDict.firstWhere((e) => e?.label == label,orElse: () => null);

解决方法:仔细看报错的堆栈信息,找到错误出发的地方,认真调试。

错误提示:Stack Overflow


======== Exception caught by widgets library =======================================================
The following StackOverflowError was thrown building OrderIndexPage(dirty):
Stack Overflow

The relevant error-causing widget was: 
  OrderIndexPage OrderIndexPage:file:///Volumes/data/WorkSpaces/DownReport/order_manager_flutter/lib/common/routers/pages.dart:43:25
When the exception was thrown, this was the stack: 
#5      Logger.write (package:order_manager_flutter/common/utils/logger.dart:4:12)
#6      _InstanceBuilderFactory._showInitLog (package:get/get_instance/src/get_instance.dart:510:14)
#7      _InstanceBuilderFactory.getDependency (package:get/get_instance/src/get_instance.dart:520:9)
#8      GetInstance._startController (package:get/get_instance/src/get_instance.dart:282:28)
#9      GetInstance._initDependencies (package:get/get_instance/src/get_instance.dart:239:11)
#10     GetInstance.find (package:get/get_instance/src/get_instance.dart:328:17)
#11     Inst.find (package:get/get_instance/src/extension_instance.dart:70:45)
#12     new OrderService (package:order_manager_flutter/pages/order/order_service.dart:9:52)
#13     new OrderIndexController (package:order_manager_flutter/pages/order/index/controller.dart:22:32)
#14     OrderIndexBinding.dependencies.<anonymous closure> (package:order_manager_flutter/pages/order/index/bindings.dart:8:45)
#15     _InstanceBuilderFactory.getDependency (package:get/get_instance/src/get_instance.dart:521:33)
#16     GetInstance._startController (package:get/get_instance/src/get_instance.dart:282:28)
#17     GetInstance._initDependencies (package:get/get_instance/src/get_instance.dart:239:11)
#18     GetInstance.find (package:get/get_instance/src/get_instance.dart:328:17)
#19     Inst.find (package:get/get_instance/src/extension_instance.dart:70:45)
#20     new OrderService (package:order_manager_flutter/pages/order/order_service.dart:9:52)
#21     new OrderIndexController (package:order_manager_flutter/pages/order/index/controller.dart:22:32)
#22     OrderIndexBinding.dependencies.<anonymous closure> (package:order_manager_flutter/pages/order/index/bindings.dart:8:45)
#23     _InstanceBuilderFactory.getDependency (package:get/get_instance/src/get_instance.dart:521:33)
#24     GetInstance._startController (package:get/get_instance/src/get_instance.dart:282:28)
#25     GetInstance._initDependencies (package:get/get_instance/src/get_instance.dart:239:11)
#26     GetInstance.find (package:get/get_instance/src/get_instance.dart:328:17)
#27     Inst.find (package:get/get_instance/src/extension_instance.dart:70:45)
#28     new OrderService (package:order_manager_flutter/pages/order/order_service.dart:9:52)
#29     new OrderIndexController (package:order_manager_flutter/pages/order/index/controller.dart:22:32)
#30     OrderIndexBinding.dependencies.<anonymous closure> (package:order_manager_flutter/pages/order/index/bindings.dart:8:45)
#31     _InstanceBuilderFactory.getDependency (package:get/get_instance/src/get_instance.dart:521:33)
#32     GetInstance._startController (package:get/get_instance/src/get_instance.dart:282:28)
#33     GetInstance._initDependencies (package:get/get_instance/src/get_instance.dart:239:11)
#34     GetInstance.find (package:get/get_instance/src/get_instance.dart:328:17)
#35     Inst.find (package:get/get_instance/src/extension_instance.dart:70:45)
#36     new OrderService (package:order_manager_flutter/pages/order/order_service.dart:9:52)
#37     new OrderIndexController (package:order_manager_flutter/pages/order/index/controller.dart:22:32)
#38     OrderIndexBinding.dependencies.<anonymous closure> (package:order_manager_flutter/pages/order/index/bindings.dart:8:45)
#39     _InstanceBuilderFactory.getDependency (package:get/get_instance/src/get_instance.dart:521:33)
#40     GetInstance._startController (package:get/get_instance/src/get_instance.dart:282:28)
#41     GetInstance._initDependencies (package:get/get_instance/src/get_instance.dart:239:11)
...
...
#9152   ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
#9153   ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
...     Normal element mounting (16 frames)
#9169   Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
#9170   Element.updateChild (package:flutter/src/widgets/framework.dart:3524:20)
#9171   ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#9172   StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#9173   Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#9174   BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#9175   WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#9176   RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#9177   SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#9178   SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#9179   SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:862:7)
(elided 16 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
====================================================================================================

错误提示:SocketException: Failed host lookup: '192.168.2.5' (OS Error: No address associated with hostname, errno = 7)

解决方法:缺少网络权限,在android/app/src/main/AndroidManifest.xml文件中,文件别选错了,增加权限配置。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />