flutter问题记录及解决方案
已解决问题
1、 安卓卡在Installing build/app/outputs/apk/app.apk...
手机开发者处撤销授权,然后重插usb在此授权
2、flutter 降级
目前版本是 v1.7.8+hotfix.4
flutter 降级
进入flutter根目录
flutter version
列出所有版本
找到降级对应版本
flutter version v1.7.8+hotfix.3
3、添加swiper 到customscrollview 上出现问题,页面在数据为空的时候总显示异常
问题
I/flutter (15202): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (15202): The following assertion was thrown building Swiper(state: _SwiperState#13dfc):
I/flutter (15202): ScrollController not attached to any scroll views.
I/flutter (15202): 'package:flutter/src/widgets/scroll_controller.dart':
I/flutter (15202): Failed assertion: line 110 pos 12: '_positions.isNotEmpty'
I/flutter (15202): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (15202): more information in this error message to help you determine and fix the underlying cause.
I/flutter (15202): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (15202): https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter (15202): Widget creation tracking is currently disabled. Enabling it enables improved error messages. It can
I/flutter (15202): be enabled by passing `--track-widget-creation` to `flutter run` or `flutter test`.
I/flutter (15202): When the exception was thrown, this was the stack:
解决方案
嵌套在CustomScrollView使用抛出异常,进行swiper count 判断,如果数量为空则不显示,数量不为空在显示 if (null == _swipers || _swipers.isEmpty) ? SizedBox() : _swiper() ;
问题是可能swiper 必须要要返回数组
没有解决的问题
// initState 中设置回调后不可以调用 setState 方法否则报错,否则运行出错
// widget.onTap(string);
4、集成jpush android出现数据包丢失,原因是jpush 适配的版本号和自己项目版本号不同,解决方案是将jpush Fork到自己的项目,然后修改Android 的build.gradle 文件,修改成和项目对应的版本,然后重新导入
jpush_flutter:
git:
url: https://github.com/Xingefb/jpush-flutter-plugin.git
5、android http 在9.0 以上失效问题 在 AndroidManifest.xml中 <application下直接添加如下代码
android:allowBackup="true"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
6、引入aar文件
项目级/build.gradle
allprojects {
repositories {
google()
jcenter()
// 引入第三方添加
flatDir {
dir "../libs"
}
}
}
项目/app/build.gradle
dependencies {
implementation(name: 'applog-release', ext: 'aar')
}
7、创建plugin时候android 构建时候 引入本地 jar
dependencies {
implementation files('libs/xxx.jar')
}
8、父子类传值尽量直接用原值传递,initstate 加中转值会出现缓存问题
直接赋值使用
widget.model.state
9、应用切换后会出现其他应用调用键盘,然后再返回本应用页面底部导航会出现上弹然后回落的一个过程 再没有输入框的页面默认添加上这句代码就好了
Scaffold(
resizeToAvoidBottomPadding: false,
)
10、如果在iOS运行项目出现不能找到flutter 库 切换channel 来进行调整 flutter channel dev(or other)
11、flutter 数据初始化设置不能设置在监听下,否则数据设置后不显示
12、apk重签名
keytool -genkey -v -keystore key.jks -alias sign -keyalg RSA -validity 10000
jarsigner -verbose -keystore key.jks -signedjar new.apk old.apk sign
13、页面跳转为空页面
第一层和第二层都为活跃的页面 需要清空第一个页面的活跃状态
14、Manifest文件中 android:allowBackup="true" 修改为false 增加安全性
在AndroidManifest.xml若将allowBackUp属性设为true,用户即可通过adb buckup命令备份文件数据并通过adb restore命令将备份文件导入
15、wifi监听特别注意
首次进入页面需要进行网络判断,然后再次监听网络否则在未初始化页面的时候首次进入不会进入监听方法
initNetState();
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
_hWifi = (ConnectivityResult.none == result) ? false : true;
setState(() {});
});
16、禁止单个app的网络访问同样是没有网络的状态,此时需要多加一种状态
进行判断
_canLoading() async {
try {
final result = await InternetAddress.lookup('baidu.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
return true;
}
} on SocketException catch (_) {
print('not connected');
return false;
}
}
17、最近大量打包遇到问题,在更改flutter文件后 android如何批量打包???求解
18、添加刷新和国际化红藕textfield光标就向上偏移
// 注视掉会变好,求解
// localizationsDelegates: [
// RefreshLocalizations.delegate,
// GlobalMaterialLocalizations.delegate,
// GlobalWidgetsLocalizations.delegate,
// CommonLocalizationsDelegate(),
// ],
// supportedLocales: [
// const Locale('zh'),
// const Locale('en'),
// ],