flutter

Flutter实际开发bug总结

2019-08-13  本文已影响60人  rhyme_lph

目录

1.1 安卓release包缺少libflutter.so
1.2 AndroidStudio导入项目后自动变为model,没有Flutter目录
1.3 输入框内容为空时,长按不显示粘贴工具栏
1.4 SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0, 4.2
1.5 复制粘贴面板英文的问题
1.6 调用库的时候报Methods marked with @UiThread must be executed on the main thread.Current thread: XXXX
1.7 用Navigator.of(context).pushNamed(routeName)如何传递参数

1.1 安卓release包缺少libflutter.so

修改/android/app/build.gradle文件如下

android{
    defaultConfig{
        ndk {
            abiFilters "armeabi-v7a", "x86"
       }
    }
    buildTypes {
          debug {
              ndk {
                abiFilters "armeabi-v7a", "x86"
              }
          }
          release {
              ndk {
                 abiFilters "armeabi-v7a"
              }   
         }
    }
}

1.2 AndroidStudio导入项目后自动变为model,没有Flutter目录

image.png

解决方法:
在导入项目时选择下面选项
File-Open-选中你的项目

1.3 输入框内容为空时,长按不显示粘贴工具栏

将输入框中的autoFocus属性为ture去掉

1.4 SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0, 4.2

将项目打开为ios项目,然后在文件列面中找到Pods(建议升级xcode即可解决)

image.png

1.5 复制粘贴面板英文的问题

pubspec.yaml添加国际化支持,然后运行flutter packages get

dependencies:
  ...
  flutter_localizations:
    sdk: flutter

找到代码MaterialApp或者CupertinoApp或者WidgetsApp的文件,添加下面代码即可

        MaterialApp(
//...
//new
                localizationsDelegates: const [
                  GlobalMaterialLocalizations.delegate,
                  GlobalWidgetsLocalizations.delegate
                ],
                supportedLocales:[
                  Locale('zh',''),
                  Locale('en','')
                ],
//new
              )

1.6 调用库的时候报Methods marked with @UiThread must be executed on the main thread.Current thread: XXXX

出现该异常的主要原因是Flutter1.7.8版本添加了线程安全,需要原生在主线程中返回给Flutter
解决方法:

//Result result  flutter的result
new Thread(new Runnable() {
      public void run() {
//.....
result.success(null);//这里就会导致异常
     }).start();

改为

//Result result  flutter的result
new Thread(new Runnable() {
      public void run() {
//.....
    new Handler().post(new Runnable() {
                @Override
                public void run() {
                    result.success(file.getAbsolutePath());
                }
            });
     }).start();

上面是伪代码,不建议这样做,可能会导致内存溢出

1.7 用Navigator.of(context).pushNamed(routeName)如何传递参数

传递参数

Navigator.of(context).pushNamed(routeName,arguments:{
  “name":"我是参数"
})

获取参数

final arguments=ModalRoute.of(context).settings.arguments;

欢迎在评论区留下你的bug问题,在线修bug

上一篇 下一篇

猜你喜欢

热点阅读