Flutter 学习5:开发Dart包和插件包

这个是我学习Flutter的一个系列文章:

  1. Flutter 学习1:开发环境、开发工具、初始化一个项目
  2. Flutter 学习2:从main.dart文件说起
  3. Flutter 学习3:转场、导航
  4. Flutter 学习4:集成到原有的项目中
  5. Flutter 学习5:开发Dart包和插件包

在上面的列表中第二篇文章就说到过怎么使用一个外部的包,需要到pubspec.yaml的dependencies中引入,然后到需要使用的Dart文件中import。外部包这种东西在开发中是很常见的了,它有可能是某种需求的UI库,也有可能是方便开发的工具库等等。

在Flutter中这中外部包分两种类型,一种叫Dart Packages ,它是纯Dart开发的,不涉及Native层的一些开发工具包或者UI包,比如前面用到english_words。还有一种叫Plugin Packages,它是涉及到Native层的,需要调用Native的原生代码的,可能是要调用硬件,比如获取电池电量等类似的功能库的。一个外部包至少包含一个pubspec.yaml(声明一些包名称、版本、作者等数据的文件),一个lib文件夹(包含公开的源代码,最少应该要有一个包名称命名的dart文件)。

前面的文章已经提到了,这些外部包有个官方的包管理的网站 ,现在已经有很多可用的包了,如果开发中想要用什么包,可以先去上面找找,有的话直接拿来用就不用重复造轮子了。当然肯定会有不满足需求的时候,那我们得学会自己开发!😊

Read more »

Flutter 学习4:集成到原有的项目中

这个是我学习Flutter的一个系列文章:

  1. Flutter 学习1:开发环境、开发工具、初始化一个项目
  2. Flutter 学习2:从main.dart文件说起
  3. Flutter 学习3:转场、导航
  4. Flutter 学习4:集成到原有的项目中

从前面的学习中,我觉得如果用Flutter开发一个全新的App应该还是问题不大的。它的优势在于UI统一,可以用一套UI适用两端,节省开发成本。但是也有问题是毕竟是新的多端融合方案,还有很多大环境的不支持,比如第三方SDK如何集成等问题。 如果是已经有的项目呢,能够集成Flutter吗?答案是肯定的!官方有个wiki就是介绍这个的。

IOS

创建一个Flutter模块

首先要把Flutter模块建起来,按照下面的命令来创建模块:

$ cd some/path/
$ flutter create -t module ff_flutter

这里的some path就是你原来项目的父目录,敲完命令后的目录结构大概是这样的:

some/path/
    MyOldApp/
        MyOldApp/
                AppDelegate.swift
    ff_flutter/
        lib/main.dart
        .ios/

Read more »

Flutter 学习3:转场、导航

这个是我学习Flutter的一个系列文章:

  1. Flutter 学习1:开发环境、开发工具、初始化一个项目
  2. Flutter 学习2:从main.dart文件说起
  3. Flutter 学习3:转场、导航
  4. Flutter 学习4:集成到原有的项目中

上次文章从main.dart文件开始分析,并做出来一个ListView的页面。我跟着官方的例子继续往下看,它写了一个功能,当前的列表数据可以多选,然后可以跳转到一个新的页面查看选中的值。这里就涉及到了页面跳转。具体来看看怎么做。

示例的页面跳转

前面列表页面已经出来,那要多选需要把选中的数据保留下来。

class RandomWordsState extends State<RandomWords> {
  final _suggestions = <WordPair>[];
  final _biggerFont = const TextStyle(fontSize: 18.0);
  final _saved = new Set<WordPair>(); //保存选中的值
  ...
  }

然后列表的Item我们添加了一个爱心,用来表示是否选中。这里我又要👍一个,Flutter自带的Material主题提供了各种Icon,可以直接拿来用,非常方便!

Widget _buildItem(WordPair pair) {
    //这里定义当前项是否已经选中
    final alreadySaved = _saved.contains(pair);
    return ListTile(
      title: Text(
        pair.asPascalCase,
        style: _biggerFont,
        ),
        //这里就是爱心图标,红色表示选中,空心表示未选中
      trailing: Icon(
        alreadySaved ? Icons.favorite : Icons.favorite_border,
        color: alreadySaved ? Colors.red : null,
      ),
      //ListTile的点击事件 选中还是取消选中
      onTap: (){
        setState(() {
                  if (alreadySaved) {
                    _saved.remove(pair);
                  }else {
                    _saved.add(pair);
                  } 
                });
      },
    );
  }

Read more »

Flutter 学习:从main.dart文件说起

这个是我学习Flutter的一个系列文章:

  1. Flutter 学习1:开发环境、开发工具、初始化一个项目
  2. Flutter 学习2:从main.dart文件说起
  3. Flutter 学习3:转场、导航
  4. Flutter 学习4:集成到原有的项目中

flutter的命令

上次那篇文章写了环境安装,开发工具插件安装然后用插件生成一个flutter项目。生成一个新的项目非常简单,点一下插件的New Project就行了。其实点击这个New Project就是执行了一个命令:

$ flutter create appName
# 这个appName就是你要生成的项目名

这个时候生成的项目里面,android项目用的是默认的java语言,IOS项目用的是Object-C。如果你比较新潮用了kotlin、swift语言。那只需要在那个命令后面加个参数就行了。

$ flutter create -i swift -a kotlin appName

Read more »

Flutter 学习:开发环境、开发工具、初始化一个项目

这个是我学习Flutter的一个系列文章:

  1. Flutter 学习1:开发环境、开发工具、初始化一个项目
  2. Flutter 学习2:从main.dart文件说起
  3. Flutter 学习3:转场、导航
  4. Flutter 学习4:集成到原有的项目中

Flutter是Google推出的一款移动端UI框架,可以快速统一构建Android和IOS高质量的原生UI界面。https://flutter.io 。这个应该是今年最火的跨平台多端融合的移动框架。一方面是Google推的,Google在程序员心目中的地位还是一如既往的重要!另外一方面是Facebook的React native好像这些年有些式微,比如Airbnb就在今年高调宣布弃用React Native框架。

程序员总是要保持一颗包容的心,因为程序员世界里面每天都有新东西出现。新东西来了不管工作中用不用至少应该大概学习了解下,算是知识和技术的储备,说不定以后这个新技术翻天了呢,公司也要引入了呢?正所谓技多不压身! 废话说了很多了,开始进入正题。

Read more »

IOS生成静态库

上次发了一篇《Cocoapods发布自定义开源组件库》的文章,这种开源组件库你发布后,别人通过pod下载安装到项目里面就能看到所有的源码信息,甚至能直接修改源码。但有时候有需要不能公开源码,但是又要打包给别人用的,比如公司的某个产品需要提供SDK给别人使用。

Read more »

CocoaPods 发布自定义的开源组件

pod lib create 的命令说明

我们开发应用的时候经常会用到别人开发好的组件,比如Moya网络请求库、HandyJSON阿里巴巴的JSON解析库等等很多很多。我们只需要一个Podfile文件和敲一个pod install就可以使用这些开源库了,非常方便。程序员的这种开源精神一直都是受到大家好评的,那既然我们也是程序员,就应用为开源做贡献的嘛。可能你有啥好点子也想开源出来,发布到CocoaPods上供大家使用,那该如何发布自己的库呢?CocoaPods提供了很简单方便的模式。 官方提供了pod lib create这个命令来生成一个cocoapods库的模版,这个是官方的说明:Using Pod Lib Create

Read more »

Shell脚本打包IOS和Android应用

打包应用一直都是个麻烦问题,IOS也好,Android也好,开发工具都是提供通过简单的点击一步步操作进行打包,IOS还能发布到App Store等。但是开发过程中总是会有很多要求,打包发布版,开发版,不同参数打包等等。时间又长,又要一个个打,想到浪费时间!于是想到用自动构建,但是IOS构建有要求,不好操作!

Read more »

IOS状态栏样式修改

以前的状态栏样式修改很简单:

UIApplication.shared.statusBarStyle = .lightContent 

把这句话写在 AppDelegate 里面就是全局的配置。如果你需要某一个单独的ViewController特殊处理就在这个ViewController里面再写一下这句话就行。

Read more »

IOS语音识别功能

语音识别现在有很多在做的,百度、迅飞等。我本来想用百度的语音识别,后来发现它的SDK不提供swift,用它的OC版本的SDK老是编译有问题。后来想反正现在苹果自带就有这个API,就是要求最低需要IOS10版本,现在10以下的应该也不多了,就打算用苹果自带的API开发一个。

Read more »