十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Android V1 升级 V2
创新互联建站主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、自适应网站建设、程序开发、网站优化、微网站、微信小程序开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的网站设计制作、成都网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。
(1)旧版方法
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
(2)新方法:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
brew 安装方式
通过gradle -v查看版本
在项目中的android/gradle/wrapper/gradle-wrapper.properties修改:
在andriod/build.gradle中找到buildscript并更新为新一点;
(在Andriod Studio 中会有提示适合的版本)
在android/build.gradle中添加阿里云的镜像地址:
如果有用到其他的源请自行添加;
附上查询阿里云源的镜像地址
在android/app/build.gradle中修改compileSdkVersion:
(flutter run 后如果不适合会提示)
升级Flutter后, 最好(能不动就不动) 把需要的pub全部升级到最新
方法是去 找到对应包的最新版本
然后更新:flutter pub get
tips:非必要真别升级,切记!切记!
如有用烦请看官点个赞
如有疑问可留言,会尽快的回复您
Flutter中Widget分为StatefulWidget和StatelessWidget,分别为动态视图和静态视图,视图的更新需要调用StatefulWidget的setState方法,这会遍历调用子Widget的build方法。当一个主页面比较复杂时,会包含多个widget,如果直接调用setState,会遍历所有子Widget的build,这是非常不必要的性能开销,有没有单独刷新指定Widget的方式呢?这个时候就要用到GlobalKey了。
一个StatefulWidget包含一个Button,一个Text,通过点击Button调用主Widget的setState方法,刷新Text,示例如下:
同样一个StatefulWidget包含一个多个Text和Button,点击Button我们只需要刷新指定的Text,通过GlobalKey的方式,实现如下:
主Widget,包含一个需要更新的TextWidget和一个不需要更新的Text
需要单独更新的Widget
传递事件的Button
这样点击Button就只会更新指定的TextWidget了,效果如下:
这只是一个简单的例子,在实际开发中为了页面刷新的高效率,模块化封装非常重要。很多情况下都只需要局部刷新,而不是重构整个视图。所以Globalkey的运用在项目中需要熟练掌握
在此之前先推荐看大佬的: 填坑指导
iOS需要注意:
1、flutter2.0要求cocoapods 升级到1.9.0
详情看这篇博客
2、原来flutter项目中的podfile文件是旧版本的ccocoapods了,删除podfile和对应的.lock,然后flutter项目重新运行使用它自动生成的podfile文件
3、安装CocoaPods
卸载cocoapods:sudo gem uninstall cocoapods
查看cocoapods版本:pod --version
指定版本安装:
sudo gem install -n /usr/local/bin cocoapods -v 1.9.3(新MacOS系统升级)
不指定版本安装
sudo gem install -n /usr/local/bin cocoapods
说明 :老项目sdk1.17.0===升级到2.0.1,当前所有操作基于win平台
到此为止环境已经准备妥当,正式进入项目修改。
所有的插件都要适配到空安全,插件是否支持均会有对应说明Null safety,适配过程不确定版本的话,可以使用dio: any,适配完事后再在pubspec.lock文件中查看具体的版本修改过来,实在有部分插件没有支持的,参考下面
部分插件在适配空安全的版本放弃维护了,得自行更新或寻找替代,如: flutter_swiper 变为 flutter_swiper_null_safety ,插件更新后要注意项目中的用法是否需要更新
2.1.1: 以前采用的是 provide 插件共享全局数据,现在变化为 provider ,用法改变, 点击参考 ,以防文章丢失,我重复一遍:
比如:
2.1.2: dio版本升级到4.0.0最新版后,部分用法改变
2.2.1
2.2.2
解决方案:
2.2.3
解决方案:
2.2.4
解决方案:
2.2.5
解决方案:
2.2.6
解决方案:
2.2.7
解决方案:
2.2.8
解决方案: child 换为sliver
2.2.8.1
解决方案: 项目目录下: android--app-build.gradle --minSdkVersion改为:18 或者19
2.2.8.2
解决方案: 在pubspec.yarm管理里面添加:publish_to
2.2.8.3
解决方案: video_player升级后字段发生了变化,initialized字段更换为:isInitialized(_controller.value.isInitialized)
2.2.8.4
解决方案:
2.2.8.5
解决方案:
2.2.8.6
解决方案: 方案一:删除ios目录下的Podfile.lock 文件然后重新运行 pod install命令
方案二:删除ios目录下的Podfile.lock与Podfile文件 重新运行flutter run或flutter build ios
方案三:删除ios目录,重新运行 flutter create . 命令,注意有"."这个符号不要忘记
2.2.8.7
这个报错一般对应的就是下面的报错,注意看后面的报错信息,看是哪个插件报错。
解决方案: 把Podfile的版本注释打开,改为platform :ios, '9.0' 或者是更高的版本
全局替换
1.将new List() 替换为[];
2.TextField的inputFormatters:[WhitelistingTextInputFormatter.digitsOnly] 替换为[FilteringTextInputFormatter.digitsOnly]
3.TextField的inputFormatters:[WhitelistingTextInputFormatter(RegExp("[a-z|A-Z|0-9]"))]替换为FilteringTextInputFormatter.allow(RegExp("[a-z|A-Z|0-9]"))
4.Stack组件中overflow: Overflow.visible改为 clipBehavior: Clip.none;overflow: Overflow.clip改为clipBehavior:Clip.hardEdge
5.ListWheelScrollView组件中clipToSize = false改为clipBehavior: Clip.none,clipToSize = true改为 Clip.hardEdge
6.TextField中maxLengthEnforced: true改为maxLengthEnforcement:MaxLengthEnforcement.enforced
7.FlatButton、RaisedButton、OutlineButton的变化: 官方参考
颜色的属性发生了变化,由原来的Color 变为了MaterialStatePropertyColor, 这是未了解决不同状态(pressed、hovered、focused、disabled)下按钮颜色的变化
例如
8.出现如下警告
9.showSnackBar报错误
解决方案: Scaffold换为ScaffoldMessenger
10.textSelectionColor弃用
解决方案:
11.charts_flutter升级后属性报错
解决方案:
12.flutter 真机调试无法访问网络,dio报错
解决方案:
android:
ios:
问题12完整参考
需要在命令行操作
但是我查出来的并没有我的包名
6.成功了,现在在安装APP,就ok了