美文网首页
Flutter初探

Flutter初探

作者: 二城默 | 来源:发表于2020-04-20 09:00 被阅读0次

    Flutter与原生Android对比:

    1.安装包:

    flutter 版的 apk 大小会比 android 原生的多出约 6M 左右,其中核心引擎大约 3.2MB,框架+应用程序代码大约是 1.25MB,必需的 Java 代码 .dex 将近 60k,而 assets 文件里还约有 2.1MB 的 ICU 数据等,单纯从安装包上来说,原生是要优于 flutter 的。

    2.性能:

    flutter 应用在 CPU 和内存的资源占用上会比原生方式多一些,所以单纯的从性能上来说,android 原生是肯定要优于 flutter 的,但是从用户体验上来说,两者的滑动同样顺畅无比,几乎感觉不到差别。

    android 原生在内存、CPU 资源占用方面要低于 flutter,并且安装包的体积也要小于 flutter,所以,不考虑其他因素,单纯从性能角度来说,android 原生肯定是要优于 flutter 的。但 flutter 也有它的优点,比如跨平台的开发、毫秒级的热重载等等,另外跨端开发也逐渐的流行起来,所以,我们在学好android原生的基础上,对跨端开发也要抱有积极的心态。

    async 表示内部有代码需要延迟执行

    由于并没有开启新的线程,只是进行IO中断改变CPU调度,所以网络请求这样的异步操作可以使用async、await,但如果是执行大量耗时同步操作的话,应该使用isolate开辟新的线程去执行。

    IOS发布链接:itms-services://?action=download-manifest&url=https://doctest.arcsoft.com.cn/app/IOS/Info.plist

    遇到问题1:

    chenyingyoudeMacBook-Pro:~ yingyou$ flutter packages get

    Waiting for another flutter command to release the startup lock…

    解决方法,如下: 

    1、关掉Android Studio打开flutter的安装目录/bin/cache/ 

    2、删除lockfile文件 

    3、继续执行终端

    遇到问题2:

    Showing All Messages diff: /Podfile.lock: No such file or directory diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

    解决方法:进入ios目录下 pod install

    pod update --no-repo-update

    遇到问题3:

    在接入极光推送插件时,闪退,需要添加完整cup的.so库

    ndk {

    //选择要添加的对应 cpu 类型的 .so 库。

        abiFilters'armeabi','armeabi-v7a','x86','x86_64','mips','mips64','arm64-v8a'

    }

    it.twsweb.Nextcloud

    遇到问题4;

    换flutter sdk时遇到问题

    删除flutter/.pub-cache文件夹

    然后运行flutter packages get就可以了

    遇到问题5:

    调试闪退,打包不闪退,或反过来

    ndk { abiFilters"armeabi","armeabi-v7a","x86","mips"} } sourceSets { main { jniLibs.srcDirs = ['libs'] } }

    Element

    Element是Widget的实例

    遇到问题1:

    如何修改DropdownMenuItem高度

    进入源码,修改_kMenuItemHeight

    只传json:

    response =await dio.post(

    url,

      data: data,

      cancelToken: cancelToken,

    );

    传参数字:

    response =await dio.post(

    url,

      queryParameters: data,

      cancelToken: cancelToken,

    );

    时间截取

    firstDate:newDateTime.now().subtract(newDuration(days:30)),// 减 30 天

    lastDate:newDateTime.now().add(newDuration(days:30)),// 加 30

    ///时间格式化

    import 'package:intl/intl.dart';

    DateTime dateTimeNow = DateTime.now();

    var format =new DateFormat("yyyy-MM-dd");

    var dateTimeStart = format.format(dateTimeNow);

    做打卡日历(要求固定6行,每行七天)思路是获取当月的List<DateTime>时利用时间截取,截取当月一号的周一开始的后面42天

    Flutter控件:(方法互调)

    final VoidCallback onLongPress;

    void _onLongPress() {

    widget.onLongPress();

    }

    在控件中调用_onLongPress,可以调用到传入的onLongPress方法回调

    从之后页面返回后刷新当前页面指定数据

    生成.g.data文件

    flutter packages pub run build_runner build

    flutter packages pub run build_runner build --delete-conflicting-outputs

    flutter packages pub run build_runner watch

    替换符号

    applyDescription.replaceAll("\r\t", "\n")

    ListView自适应

    shrinkWrap:true,

    physics:const NeverScrollableScrollPhysics(),

    Text : overflow: TextOverflow.ellipsis

    TabView不可滑动:

    physics:new NeverScrollableScrollPhysics(),

    横竖屏:

    OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp);

    SystemChrome.setPreferredOrientations([

      DeviceOrientation.portraitUp,

      DeviceOrientation.portraitDown,

      DeviceOrientation.landscapeLeft,

      DeviceOrientation.landscapeRight,

    ]);

    IOS播放视频需要权限

    收起键盘

    FocusScope.of(context).requestFocus(new FocusNode());

    ios开发,build.gradle中可能要换成"../build";"/build"

    DropdownButton的List第一项与value值必须一样

    弹出框

    showDialog(

    // 第一个 context 是参数名,第二个 context 是 State 的成员变量

      context:context,

      builder: (_) {

    return AlertDialog(

    // dialog 的内容

          content:Text("确定要提交请假申请吗?"),

          // actions 设置 dialog 的按钮

          actions: [

    RaisedButton(

    disabledColor: Colors.blue,

                child:Text(

    '确定',

                  style:TextStyle(color: Colors.white),

                ),

                // 用户点击按钮后,关闭弹框

                onPressed: () {

    ApplyHoliday();

                  Navigator.pop(context);

                }),

            RaisedButton(

    color: Colors.grey,

                child:Text(

    '取消',

                  style:TextStyle(color: Colors.white),

                ),

                // 用户点击按钮后,关闭弹框

                onPressed: () {

    Navigator.pop(context);

                }),

          ],

        );

      },

    );

    相关文章

      网友评论

          本文标题:Flutter初探

          本文链接:https://www.haomeiwen.com/subject/lexcdqtx.html