Add:创建 flutter go web 版
@ -1,86 +0,0 @@
|
|||||||
## 更新日志
|
|
||||||
|
|
||||||
|
|
||||||
#### 2019-2-5
|
|
||||||
- [x] 处理因为flutter版本导致的项目运行不起来
|
|
||||||
- [x] 更新readme, 加入开发日志, 与相关说明
|
|
||||||
- [x] 加入 首页欢迎效果图
|
|
||||||
- [x] refactor(整理richText的说明):
|
|
||||||
- [x] 解决一些页面的code演示打不开的问题
|
|
||||||
- [x] add:开发规范
|
|
||||||
- [x] add:版本更新历史链接
|
|
||||||
- [x] Update README.md
|
|
||||||
- [x] add:添加版本号
|
|
||||||
- [x] feat:添加代码开发规范
|
|
||||||
- [x] refactor(update: version & fiexed warns):
|
|
||||||
- [x] fix(solve conflict):
|
|
||||||
- [x] modify:toast and andrid apk label
|
|
||||||
- [x] Add:自动 pr 工具抓取器,抓取两周前至今的,提交数据,并去重
|
|
||||||
- [x] fix:fluttetToast backHome
|
|
||||||
- [x] fix:modified the style of toast && remote files
|
|
||||||
- [x] chore(删除tools/log.json):
|
|
||||||
- [x] 重构文件结构
|
|
||||||
- [x] 关于手册图标更换
|
|
||||||
- [x] 增加demo: CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold CupertinoPicker,CupertinoPopupSurface CupertinoTimerPickerDemo
|
|
||||||
|
|
||||||
|
|
||||||
#### 2019-1-24
|
|
||||||
- [x] 功能:更新小部件的图标
|
|
||||||
- [x] 功能:添加CupertinoTimerPickerDemo
|
|
||||||
- [x] 调试:消除警告
|
|
||||||
- [x] 修复:关于手册图标更换
|
|
||||||
- [x] 添加:文案描述
|
|
||||||
- [x] 添加:CupertinoPicker,CupertinoPopupSurface
|
|
||||||
#### 2019-1-23
|
|
||||||
- [x] 修复: 导航栏home返回报错
|
|
||||||
- [x] 修复:收集错误
|
|
||||||
- [x] 添加:CupertinoNavigationBar CupertinoPageRoute CupertinoPageScaffold
|
|
||||||
#### 2019-1-22
|
|
||||||
- [x] 功能:在Allsimon拉请求中添加英文简介
|
|
||||||
#### 2019-1-21
|
|
||||||
- [x] 功能:Cupertino的子项
|
|
||||||
#### 2019-1-20
|
|
||||||
- [x] 功能:CupertinoSwitch演示
|
|
||||||
- [x] 功能:为搜索列表加入图标
|
|
||||||
- [x] 功能:CupertinoSliverRefreshControl演示
|
|
||||||
- [x] 功能:CupertinoSliverNavigationBar演示
|
|
||||||
#### 2019-1-18
|
|
||||||
- [x] 更新:SharedPreferences保存数据和android设备布局溢出
|
|
||||||
- [x] 功能:添加CupertinoScrollbar演示
|
|
||||||
- [x] 功能:第四页暂时用欢迎页替代。后期再开发
|
|
||||||
#### 2019-1-17
|
|
||||||
- [x] 添加:+许可证
|
|
||||||
#### 2019-1-16
|
|
||||||
- [x] 转换:将README翻译为En语言环境
|
|
||||||
- [x] 功能:CupertinoScrollbar演示
|
|
||||||
#### 2019-1-14
|
|
||||||
- [x] 添加:增加手册页面
|
|
||||||
- [x] 功能:文字演示
|
|
||||||
- [x] 重构:修改过的图标
|
|
||||||
- [x] 重构:文档,文章,组件收藏,新增webView
|
|
||||||
- [x] 重构:修改过的演示
|
|
||||||
- [x] 重构:代码视图
|
|
||||||
- [x] 更新:版本 和readme.md
|
|
||||||
- [x] 修改:添加代码视图
|
|
||||||
- [x] 功能:添加搜索历史记录板
|
|
||||||
- [x] 修改:列出加标头错误
|
|
||||||
#### 2019-1-15
|
|
||||||
- [x] 功能:welcomepage
|
|
||||||
#### 2019-1-13
|
|
||||||
- [x] 添加:一些输入描述
|
|
||||||
- [x] 功能:加入GridPaper&SliverGrid
|
|
||||||
- [x] 重构:修改db
|
|
||||||
- [x] 重构:删除数据库 TabBarView
|
|
||||||
- [x] 添加:网格视图
|
|
||||||
- [x] 修改:checkbosListTile 错误
|
|
||||||
- [x] 修改:自动提示文案
|
|
||||||
- [x] 功能:增加免责声明,声明组件,自动弹出,左上角入口
|
|
||||||
- [x] 重构:整理数据库初始逻辑,判断数据库完整性,判断是否存在已知的cat,widget,collection 三张表。
|
|
||||||
- [x] 修复:DialogDemo,无法关闭的问题
|
|
||||||
#### 2019-1-12
|
|
||||||
- [x] 修复:icon没有,但内容有的,组件,给补充了icon
|
|
||||||
- [x] 修改:1.整理文件 2.修正分析
|
|
||||||
- [x] 更新:flutter_rookie_book => flutter_go
|
|
||||||
- [x] 更新:更新SearchInput文件名=> search_input
|
|
||||||
- [x] 修改:文件名称的大小写规范
|
|
||||||
- [x] 修改:修正bottomNavigationBar iconButton警告
|
|
BIN
FlutterGo.apk
@ -1,679 +0,0 @@
|
|||||||
# Flutter Go 代码开发规范 0.1.0 版
|
|
||||||
|
|
||||||
## 代码风格
|
|
||||||
|
|
||||||
### 标识符三种类型
|
|
||||||
|
|
||||||
#### 大驼峰
|
|
||||||
类、枚举、typedef和类型参数
|
|
||||||
|
|
||||||
```
|
|
||||||
class SliderMenu { ... }
|
|
||||||
|
|
||||||
class HttpRequest { ... }
|
|
||||||
|
|
||||||
typedef Predicate = bool Function<T>(T value);
|
|
||||||
```
|
|
||||||
|
|
||||||
包括用于元数据注释的类
|
|
||||||
|
|
||||||
```
|
|
||||||
class Foo {
|
|
||||||
const Foo([arg]);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Foo(anArg)
|
|
||||||
class A { ... }
|
|
||||||
|
|
||||||
@Foo()
|
|
||||||
class B { ... }
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 使用小写加下划线来命名库和源文件
|
|
||||||
|
|
||||||
```
|
|
||||||
library peg_parser.source_scanner;
|
|
||||||
|
|
||||||
import 'file_system.dart';
|
|
||||||
import 'slider_menu.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
library pegparser.SourceScanner;
|
|
||||||
|
|
||||||
import 'file-system.dart';
|
|
||||||
import 'SliderMenu.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
#### 使用小写加下划线来命名导入前缀
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'dart:math' as math;
|
|
||||||
import 'package:angular_components/angular_components'
|
|
||||||
as angular_components;
|
|
||||||
import 'package:js/js.dart' as js;
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'dart:math' as Math;
|
|
||||||
import 'package:angular_components/angular_components'
|
|
||||||
as angularComponents;
|
|
||||||
import 'package:js/js.dart' as JS;
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 使用小驼峰法命名其他标识符
|
|
||||||
|
|
||||||
```
|
|
||||||
var item;
|
|
||||||
|
|
||||||
HttpRequest httpRequest;
|
|
||||||
|
|
||||||
void align(bool clearItems) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 优先使用小驼峰法作为常量命名
|
|
||||||
|
|
||||||
```
|
|
||||||
const pi = 3.14;
|
|
||||||
const defaultTimeout = 1000;
|
|
||||||
final urlScheme = RegExp('^([a-z]+):');
|
|
||||||
|
|
||||||
class Dice {
|
|
||||||
static final numberGenerator = Random();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
const PI = 3.14;
|
|
||||||
const DefaultTimeout = 1000;
|
|
||||||
final URL_SCHEME = RegExp('^([a-z]+):');
|
|
||||||
|
|
||||||
class Dice {
|
|
||||||
static final NUMBER_GENERATOR = Random();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 不使用前缀字母
|
|
||||||
因为Dart可以告诉您声明的类型、范围、可变性和其他属性,所以没有理由将这些属性编码为标识符名称。
|
|
||||||
|
|
||||||
```
|
|
||||||
defaultTimeout
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
kDefaultTimeout
|
|
||||||
```
|
|
||||||
|
|
||||||
### 排序
|
|
||||||
|
|
||||||
为了使你的文件前言保持整洁,我们有规定的命令,指示应该出现在其中。每个“部分”应该用空行分隔。
|
|
||||||
|
|
||||||
#### 在其他引入之前引入所需的dart库
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'dart:async';
|
|
||||||
import 'dart:html';
|
|
||||||
|
|
||||||
import 'package:bar/bar.dart';
|
|
||||||
import 'package:foo/foo.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 在相对引入之前先引入在包中的库
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'package:bar/bar.dart';
|
|
||||||
import 'package:foo/foo.dart';
|
|
||||||
|
|
||||||
import 'util.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 第三方包的导入先于其他包
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'package:bar/bar.dart';
|
|
||||||
import 'package:foo/foo.dart';
|
|
||||||
|
|
||||||
import 'package:my_package/util.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 在所有导入之后,在单独的部分中指定导出
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'src/error.dart';
|
|
||||||
import 'src/foo_bar.dart';
|
|
||||||
|
|
||||||
export 'src/error.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
import 'src/error.dart';
|
|
||||||
export 'src/error.dart';
|
|
||||||
import 'src/foo_bar.dart';
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### 所有流控制结构,请使用大括号
|
|
||||||
|
|
||||||
这样做可以避免悬浮的else问题
|
|
||||||
|
|
||||||
```
|
|
||||||
if (isWeekDay) {
|
|
||||||
print('Bike to work!');
|
|
||||||
} else {
|
|
||||||
print('Go dancing or read a book!');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 例外
|
|
||||||
一个if语句没有else子句,其中整个if语句和then主体都适合一行。在这种情况下,如果你喜欢的话,你可以去掉大括号
|
|
||||||
|
|
||||||
```
|
|
||||||
if (arg == null) return defaultValue;
|
|
||||||
```
|
|
||||||
|
|
||||||
如果流程体超出了一行需要分划请使用大括号:
|
|
||||||
|
|
||||||
```
|
|
||||||
if (overflowChars != other.overflowChars) {
|
|
||||||
return overflowChars < other.overflowChars;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
if (overflowChars != other.overflowChars)
|
|
||||||
return overflowChars < other.overflowChars;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 注释
|
|
||||||
|
|
||||||
### 要像句子一样格式化
|
|
||||||
除非是区分大小写的标识符,否则第一个单词要大写。以句号结尾(或“!”或“?”)。对于所有的注释都是如此:doc注释、内联内容,甚至TODOs。即使是一个句子片段。
|
|
||||||
|
|
||||||
```
|
|
||||||
greet(name) {
|
|
||||||
// Assume we have a valid name.
|
|
||||||
print('Hi, $name!');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
greet(name) {
|
|
||||||
/* Assume we have a valid name. */
|
|
||||||
print('Hi, $name!');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
可以使用块注释(/…/)临时注释掉一段代码,但是所有其他注释都应该使用//
|
|
||||||
|
|
||||||
### Doc注释
|
|
||||||
使用///文档注释来记录成员和类型。
|
|
||||||
|
|
||||||
使用doc注释而不是常规注释,可以让dartdoc找到并生成文档。
|
|
||||||
|
|
||||||
```
|
|
||||||
/// The number of characters in this chunk when unsplit.
|
|
||||||
int get length => ...
|
|
||||||
```
|
|
||||||
|
|
||||||
> 由于历史原因,达特茅斯学院支持道格评论的两种语法:///(“C#风格”)和/**…* /(“JavaDoc风格”)。我们更喜欢/// 因为它更紧凑。/**和*/在多行文档注释中添加两个无内容的行。在某些情况下,///语法也更容易阅读,例如文档注释包含使用*标记列表项的项目符号列表。
|
|
||||||
|
|
||||||
### 考虑为私有api编写文档注释
|
|
||||||
|
|
||||||
Doc注释并不仅仅针对库的公共API的外部使用者。它们还有助于理解从库的其他部分调用的私有成员
|
|
||||||
|
|
||||||
#### 用一句话总结开始doc注释
|
|
||||||
|
|
||||||
以简短的、以用户为中心的描述开始你的文档注释,以句号结尾。
|
|
||||||
|
|
||||||
```
|
|
||||||
/// Deletes the file at [path] from the file system.
|
|
||||||
void delete(String path) {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
/// Depending on the state of the file system and the user's permissions,
|
|
||||||
/// certain operations may or may not be possible. If there is no file at
|
|
||||||
/// [path] or it can't be accessed, this function throws either [IOError]
|
|
||||||
/// or [PermissionError], respectively. Otherwise, this deletes the file.
|
|
||||||
void delete(String path) {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### “doc注释”的第一句话分隔成自己的段落
|
|
||||||
|
|
||||||
在第一个句子之后添加一个空行,把它分成自己的段落
|
|
||||||
|
|
||||||
```
|
|
||||||
/// Deletes the file at [path].
|
|
||||||
///
|
|
||||||
/// Throws an [IOError] if the file could not be found. Throws a
|
|
||||||
/// [PermissionError] if the file is present but could not be deleted.
|
|
||||||
void delete(String path) {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Flutter_Go 使用参考
|
|
||||||
|
|
||||||
### 库的引用
|
|
||||||
|
|
||||||
flutter go 中,导入lib下文件库,统一指定包名,避免过多的```../../```
|
|
||||||
```
|
|
||||||
package:flutter_go/
|
|
||||||
```
|
|
||||||
|
|
||||||
### 字符串的使用
|
|
||||||
|
|
||||||
#### 使用相邻字符串连接字符串文字
|
|
||||||
如果有两个字符串字面值(不是值,而是实际引用的字面值),则不需要使用+连接它们。就像在C和c++中,简单地把它们放在一起就能做到。这是创建一个长字符串很好的方法但是不适用于单独一行。
|
|
||||||
|
|
||||||
```
|
|
||||||
raiseAlarm(
|
|
||||||
'ERROR: Parts of the spaceship are on fire. Other '
|
|
||||||
'parts are overrun by martians. Unclear which are which.');
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
raiseAlarm('ERROR: Parts of the spaceship are on fire. Other ' +
|
|
||||||
'parts are overrun by martians. Unclear which are which.');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 优先使用模板字符串
|
|
||||||
```
|
|
||||||
'Hello, $name! You are ${year - birth} years old.';
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 在不需要的时候,避免使用花括号
|
|
||||||
|
|
||||||
```
|
|
||||||
'Hi, $name!'
|
|
||||||
"Wear your wildest $decade's outfit."
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
'Hello, ' + name + '! You are ' + (year - birth).toString() + ' y...';
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
'Hi, ${name}!'
|
|
||||||
"Wear your wildest ${decade}'s outfit."
|
|
||||||
```
|
|
||||||
|
|
||||||
### 集合
|
|
||||||
|
|
||||||
#### 尽可能使用集合字面量
|
|
||||||
|
|
||||||
如果要创建一个不可增长的列表,或者其他一些自定义集合类型,那么无论如何,都要使用构造函数。
|
|
||||||
|
|
||||||
```
|
|
||||||
var points = [];
|
|
||||||
var addresses = {};
|
|
||||||
var lines = <Lines>[];
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
var points = List();
|
|
||||||
var addresses = Map();
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 不要使用.length查看集合是否为空
|
|
||||||
|
|
||||||
```
|
|
||||||
if (lunchBox.isEmpty) return 'so hungry...';
|
|
||||||
if (words.isNotEmpty) return words.join(' ');
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
if (lunchBox.length == 0) return 'so hungry...';
|
|
||||||
if (!words.isEmpty) return words.join(' ');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 考虑使用高阶方法转换序列
|
|
||||||
|
|
||||||
如果有一个集合,并且希望从中生成一个新的修改后的集合,那么使用.map()、.where()和Iterable上的其他方便的方法通常更短,也更具有声明性
|
|
||||||
|
|
||||||
```
|
|
||||||
var aquaticNames = animals
|
|
||||||
.where((animal) => animal.isAquatic)
|
|
||||||
.map((animal) => animal.name);
|
|
||||||
```
|
|
||||||
#### 避免使用带有函数字面量的Iterable.forEach()
|
|
||||||
|
|
||||||
在Dart中,如果你想遍历一个序列,惯用的方法是使用循环。
|
|
||||||
|
|
||||||
```
|
|
||||||
for (var person in people) {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
people.forEach((person) {
|
|
||||||
...
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 不要使用List.from(),除非打算更改结果的类型
|
|
||||||
|
|
||||||
给定一个迭代,有两种明显的方法可以生成包含相同元素的新列表
|
|
||||||
|
|
||||||
```
|
|
||||||
var copy1 = iterable.toList();
|
|
||||||
var copy2 = List.from(iterable);
|
|
||||||
```
|
|
||||||
|
|
||||||
明显的区别是第一个比较短。重要的区别是第一个保留了原始对象的类型参数
|
|
||||||
|
|
||||||
```
|
|
||||||
// Creates a List<int>:
|
|
||||||
var iterable = [1, 2, 3];
|
|
||||||
|
|
||||||
// Prints "List<int>":
|
|
||||||
print(iterable.toList().runtimeType);
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
// Creates a List<int>:
|
|
||||||
var iterable = [1, 2, 3];
|
|
||||||
|
|
||||||
// Prints "List<dynamic>":
|
|
||||||
print(List.from(iterable).runtimeType);
|
|
||||||
```
|
|
||||||
|
|
||||||
### 参数的使用
|
|
||||||
|
|
||||||
#### 使用=将命名参数与其默认值分割开
|
|
||||||
|
|
||||||
由于遗留原因,Dart均允许“:”和“=”作为指定参数的默认值分隔符。为了与可选的位置参数保持一致,使用“=”。
|
|
||||||
|
|
||||||
```
|
|
||||||
void insert(Object item, {int at = 0}) { ... }
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
void insert(Object item, {int at: 0}) { ... }
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 不要使用显式默认值null
|
|
||||||
|
|
||||||
如果参数是可选的,但没有给它一个默认值,则语言隐式地使用null作为默认值,因此不需要编写它
|
|
||||||
|
|
||||||
```
|
|
||||||
void error([String message]) {
|
|
||||||
stderr.write(message ?? '\n');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
void error([String message = null]) {
|
|
||||||
stderr.write(message ?? '\n');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 变量
|
|
||||||
|
|
||||||
#### 不要显式地将变量初始化为空
|
|
||||||
在Dart中,未显式初始化的变量或字段自动被初始化为null。不要多余赋值null
|
|
||||||
|
|
||||||
```
|
|
||||||
int _nextId;
|
|
||||||
|
|
||||||
class LazyId {
|
|
||||||
int _id;
|
|
||||||
|
|
||||||
int get id {
|
|
||||||
if (_nextId == null) _nextId = 0;
|
|
||||||
if (_id == null) _id = _nextId++;
|
|
||||||
|
|
||||||
return _id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
int _nextId = null;
|
|
||||||
|
|
||||||
class LazyId {
|
|
||||||
int _id = null;
|
|
||||||
|
|
||||||
int get id {
|
|
||||||
if (_nextId == null) _nextId = 0;
|
|
||||||
if (_id == null) _id = _nextId++;
|
|
||||||
|
|
||||||
return _id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 避免储存你能计算的东西
|
|
||||||
|
|
||||||
在设计类时,您通常希望将多个视图公开到相同的底层状态。通常你会看到在构造函数中计算所有视图的代码,然后存储它们:
|
|
||||||
|
|
||||||
应该避免的写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Circle {
|
|
||||||
num radius;
|
|
||||||
num area;
|
|
||||||
num circumference;
|
|
||||||
|
|
||||||
Circle(num radius)
|
|
||||||
: radius = radius,
|
|
||||||
area = pi * radius * radius,
|
|
||||||
circumference = pi * 2.0 * radius;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
如上代码问题:
|
|
||||||
|
|
||||||
- 浪费内存
|
|
||||||
- 缓存的问题是无效——如何知道何时缓存过期需要重新计算?
|
|
||||||
|
|
||||||
推荐的写法如下:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Circle {
|
|
||||||
num radius;
|
|
||||||
|
|
||||||
Circle(this.radius);
|
|
||||||
|
|
||||||
num get area => pi * radius * radius;
|
|
||||||
num get circumference => pi * 2.0 * radius;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 类成员
|
|
||||||
|
|
||||||
#### 不要把不必要地将字段包装在getter和setter中
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Box {
|
|
||||||
var _contents;
|
|
||||||
get contents => _contents;
|
|
||||||
set contents(value) {
|
|
||||||
_contents = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 优先使用final字段来创建只读属性
|
|
||||||
|
|
||||||
尤其对于 ```StatelessWidget```
|
|
||||||
|
|
||||||
#### 在不需要的时候不要用this
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Box {
|
|
||||||
var value;
|
|
||||||
|
|
||||||
void clear() {
|
|
||||||
this.update(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
void update(value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Box {
|
|
||||||
var value;
|
|
||||||
|
|
||||||
void clear() {
|
|
||||||
update(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
void update(value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 构造函数
|
|
||||||
|
|
||||||
#### 尽可能使用初始化的形式
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Point {
|
|
||||||
num x, y;
|
|
||||||
Point(num x, num y) {
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
class Point {
|
|
||||||
num x, y;
|
|
||||||
Point(this.x, this.y);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 不要使用new
|
|
||||||
|
|
||||||
Dart2使new 关键字可选
|
|
||||||
|
|
||||||
推荐写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Row(
|
|
||||||
children: [
|
|
||||||
RaisedButton(
|
|
||||||
child: Text('Increment'),
|
|
||||||
),
|
|
||||||
Text('Click!'),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐如下写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return new Row(
|
|
||||||
children: [
|
|
||||||
new RaisedButton(
|
|
||||||
child: new Text('Increment'),
|
|
||||||
),
|
|
||||||
new Text('Click!'),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 异步
|
|
||||||
|
|
||||||
#### 优先使用async/await代替原始的futures
|
|
||||||
|
|
||||||
async/await语法提高了可读性,允许你在异步代码中使用所有Dart控制流结构。
|
|
||||||
|
|
||||||
```
|
|
||||||
Future<int> countActivePlayers(String teamName) async {
|
|
||||||
try {
|
|
||||||
var team = await downloadTeam(teamName);
|
|
||||||
if (team == null) return 0;
|
|
||||||
|
|
||||||
var players = await team.roster;
|
|
||||||
return players.where((player) => player.isActive).length;
|
|
||||||
} catch (e) {
|
|
||||||
log.error(e);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 当异步没有任何用处时,不要使用它
|
|
||||||
|
|
||||||
如果可以在不改变函数行为的情况下省略异步,那么就这样做。、
|
|
||||||
|
|
||||||
```
|
|
||||||
Future afterTwoThings(Future first, Future second) {
|
|
||||||
return Future.wait([first, second]);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
不推荐写法:
|
|
||||||
|
|
||||||
```
|
|
||||||
Future afterTwoThings(Future first, Future second) async {
|
|
||||||
return Future.wait([first, second]);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
28
LICENSE
@ -1,28 +0,0 @@
|
|||||||
BSD License
|
|
||||||
|
|
||||||
Copyright (c) 2018-present, Alibaba Group Holding Limited. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the copyright holder nor the names of its contributors may be used to
|
|
||||||
endorse or promote products derived from this software without specific
|
|
||||||
prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
88
README-en.md
@ -1,88 +0,0 @@
|
|||||||
## Flutter Go
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
> Help developers get started quickly Flutter **Flutter Go 1.0 Android has been released**
|
|
||||||
|
|
||||||
|
|
||||||
## Download URL
|
|
||||||
|
|
||||||
Android download URL:
|
|
||||||
|
|
||||||
<img src="https://img.alicdn.com/tfs/TB1jGgfQ7voK1RjSZFNXXcxMVXa-438-426.png" width="200px">
|
|
||||||
|
|
||||||
Iphone download URL:
|
|
||||||
No
|
|
||||||
|
|
||||||
## Development Environment
|
|
||||||
This Project need latest package, please update regularly.
|
|
||||||
|
|
||||||
- dart(version: 2.0.0)
|
|
||||||
- flutter(version: v1.0.0)
|
|
||||||
|
|
||||||
### Background
|
|
||||||
|
|
||||||
#### What is Flutter?
|
|
||||||
|
|
||||||
On June 21, 2018, Google released the first release preview of Flutter as a new responsive, cross-platform, high-performance mobile development framework launched by Google. Flutter is a cross-platform mobile UI framework designed to help developers develop high-performance, high-fidelity Android and iOS apps using a single set of code.
|
|
||||||
|
|
||||||
The advantages of Flutter mainly include:
|
|
||||||
- Cross-platform
|
|
||||||
- Open source
|
|
||||||
- Hot Reload, responsive framework, and its rich controls and development tools
|
|
||||||
- Flexible interface design and control combinations
|
|
||||||
- High quality user experience with a portable GPU-accelerated rendering engine and high-performance ARM code runtime
|
|
||||||
|
|
||||||
#### The origin of Flutter Go
|
|
||||||
|
|
||||||
- Flutter has too little learning material, which is relatively difficult for students who are not good at English.
|
|
||||||
- The official website document example is not sound enough, not intuitive enough
|
|
||||||
- The usage of each widget is different, and the properties are numerous. To run a demo of a widget, it is often necessary to look through various materials everywhere.
|
|
||||||
|
|
||||||
#### Advantages of Flutter Go
|
|
||||||
|
|
||||||
- Detailed idiom widgets up to **130+**
|
|
||||||
- Companion Demo Explain the widget's general usage
|
|
||||||
- Centralized integration of widget cases, an APP to get all the usage of common widgets
|
|
||||||
- Continuous iteration ‘chasing new’ official version
|
|
||||||
|
|
||||||
### App Preview
|
|
||||||
|
|
||||||
<img src="https://img.alicdn.com/tfs/TB1oeicBhjaK1RjSZFAXXbdLFXa-345-717.gif" width=200> <img src="https://img.alicdn.com/tfs/TB1WJNuBmzqK1RjSZPcXXbTepXa-345-717.gif" width=200> <img src="https://img.alicdn.com/tfs/TB13Xh3BkvoK1RjSZFNXXcxMVXa-345-717.gif" width=200> <img src="https://img.alicdn.com/tfs/TB1MtdSBjDpK1RjSZFrXXa78VXa-345-717.gif" width=200>
|
|
||||||
|
|
||||||
|
|
||||||
### Core Team
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/minghe.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/minghe">@minghe</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/ryan730.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/ryan730">@ryan730</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/Nealyang.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/Nealyang">@Nealyang</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/hanxu317317.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/hanxu317317">@hanxu317317</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/DeckeDeng.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/DeckeDeng">@DeckeDeng</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Powered by [Alibaba Auction Front-end Team](https://github.com/alibaba-paimai-frontend)<img src="https://img.alicdn.com/tfs/TB1foEhAMHqK1RjSZJnXXbNLpXa-166-166.png" width= 20 height=20>
|
|
128
README.md
@ -1,128 +0,0 @@
|
|||||||
Language: [English](https://github.com/alibaba/flutter-go/blob/master/README-en.md) | [中文简体](https://github.com/alibaba/flutter-go/blob/master/README.md)
|
|
||||||
## Flutter Go
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
> 帮助开发者快速上手 Flutter **Flutter Go 1.0 Android版已正式发布**
|
|
||||||
|
|
||||||
## 版本更新历史
|
|
||||||
> 按时间顺序,展示重要的提交更新内容。
|
|
||||||
|
|
||||||
[地址](https://github.com/alibaba/flutter-go/blob/develop/CHANGE-LOG.md)
|
|
||||||
|
|
||||||
## 开发规范
|
|
||||||
> 由于类似 javascript, java, object-c,等开发者的语言习惯不同而产生歧义,我们依据官方提供的 [dart 语言规范](https://www.dartlang.org) 定制。
|
|
||||||
|
|
||||||
[<< Flutter Go 开发规范第一版 >>](https://github.com/alibaba/flutter-go/blob/develop/Flutter_Go%20%E4%BB%A3%E7%A0%81%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.md)
|
|
||||||
|
|
||||||
## The Flutter-Go Roadmap(路线图) for 2019
|
|
||||||
> 考虑到 Flutter 未来的变化和策略的可变性, roadmap 不排除有一定调整,但总体不会变化太大。
|
|
||||||
|
|
||||||
<img src="https://img.alicdn.com/tfs/TB19UahQQzoK1RjSZFlXXai4VXa-1500-1106.png" width="600px">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Release安装包下载地址
|
|
||||||
|
|
||||||
android下载地址:
|
|
||||||
|
|
||||||
<img src="https://img.alicdn.com/tfs/TB1ylxGTMHqK1RjSZFgXXa7JXXa-436-432.png" width="200px">
|
|
||||||
|
|
||||||
iphone下载地址: AppStore上面进行搜索fluttego
|
|
||||||
|
|
||||||
<img src="https://img.alicdn.com/tfs/TB1trMgV7PoK1RjSZKbXXX1IXXa-620-1343.png" width=200> <img src="https://img.alicdn.com/tfs/TB1w_MbV7voK1RjSZFDXXXY3pXa-620-1343.png" width=200>
|
|
||||||
|
|
||||||
|
|
||||||
## 基础环境
|
|
||||||
本项目环境持续更新. 请定期更新各依赖包.
|
|
||||||
|
|
||||||
- dart(version: 2.0.0)
|
|
||||||
- flutter(version: v1.0.0)
|
|
||||||
|
|
||||||
|
|
||||||
### 背景
|
|
||||||
|
|
||||||
#### Flutter 是什么?
|
|
||||||
|
|
||||||
2018年6月21日Google发布Flutter首个release预览版,作为Google 大力推出的一种全新的响应式,跨平台,高性能的移动开发框架。Flutter是一个跨平台的移动UI框架,旨在帮助开发者使用一套代码开发高性能、高保真的Android和iOS应用。
|
|
||||||
|
|
||||||
flutter优点主要包括:
|
|
||||||
- 跨平台
|
|
||||||
- 开源
|
|
||||||
- Hot Reload、响应式框架、及其丰富的控件以及开发工具
|
|
||||||
- 灵活的界面设计以及控件组合
|
|
||||||
- 借助可以移植的GPU加速的渲染引擎以及高性能ARM代码运行时已达到高质量的用户体验
|
|
||||||
|
|
||||||
#### Flutter Go 的由来
|
|
||||||
|
|
||||||
- Flutter学习资料太少,对于英文不好的同学相对来说比较困难
|
|
||||||
- 官网文档示例不够健全,不够直观
|
|
||||||
- 各个 widget 的用法各异,属性纷繁,要运行一个 widget 的 demo 往往要到处翻阅各种资料
|
|
||||||
|
|
||||||
#### Flutter Go 的优势
|
|
||||||
|
|
||||||
- 详解常用 widget 多达 **140+** 个
|
|
||||||
- 配套 Demo 详解 widget 常规用法
|
|
||||||
- 集中整合 widget 案例,一个 APP 搞定所有常用 widget 的用法
|
|
||||||
- 持续迭代 ‘追新’ 官方版本
|
|
||||||
|
|
||||||
### app 预览
|
|
||||||
|
|
||||||
|
|
||||||
<img src="https://img.alicdn.com/tfs/TB1MoiNExTpK1RjSZFGXXcHqFXa-362-751.gif" width=200> <img src="https://img.alicdn.com/tfs/TB1oeicBhjaK1RjSZFAXXbdLFXa-345-717.gif" width=200> <img src="https://img.alicdn.com/tfs/TB1WJNuBmzqK1RjSZPcXXbTepXa-345-717.gif" width=200> <img src="https://img.alicdn.com/tfs/TB13Xh3BkvoK1RjSZFNXXcxMVXa-345-717.gif" width=200>
|
|
||||||
|
|
||||||
### Core Team
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/minghe.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/minghe">@minghe</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/ryan730.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/ryan730">@ryan730</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/Nealyang.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/Nealyang">@Nealyang</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/hanxu317317.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/hanxu317317">@hanxu317317</a>
|
|
||||||
</td>
|
|
||||||
<td align="center" width="80" valign="top">
|
|
||||||
<img height="80" width="80" src="https://github.com/DeckeDeng.png?s=128">
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/DeckeDeng">@DeckeDeng</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
### 版权说明
|
|
||||||
- 感谢大家对 `flutter go` 的支持和下载,但近期发现,有类似直接被发布到苹果 app store 上的行为,并未注明真实来源,copyright 和 项目的 github 地址,以及开发者的版权相关信息( 包括删除"首页栏的版权声明"和"关于我们"的行为 );
|
|
||||||
|
|
||||||
- 上述行为,打击了 `flutter go` 开发者的积极性,同时干扰了 flutter go app 的正常发布渠道,基于 app 开源项目的发布特殊性,特更新 [LICENSE](LICENSE) 「 开源许可证 」,由 MIT 协议 更改为 BSD 协议, 同时建议不要随意发布到公共渠道的应用商店,影响官方 `flutter go` 的app版本迭代;
|
|
||||||
|
|
||||||
- 大家可以继续放心的开源使用,但是要求注意和遵守以下许可前提:
|
|
||||||
```
|
|
||||||
* 版权声明样式
|
|
||||||
//Copyright (c) 2018-present, Alibaba Group Holding Limited. All rights reserved.
|
|
||||||
|
|
||||||
* 源代码的重新分发必须保留上述版权声明,条件清单和免责声明。
|
|
||||||
|
|
||||||
* 二进制形式的再分发必须复制上述版权声明,此条件列表以及文档中的以下免责声明和/或随分发提供的其他材料。
|
|
||||||
```
|
|
||||||
- 由于本开源项目是供大家学习和交流 flutter 之用,里面耗费了开发人员大量的心血,精力和热情,请尊重开发者的劳动成果,以及相关许可证之规定;
|
|
||||||
|
|
||||||
- 大家的互相信任,尊重与支持,才是开源社区前进的动力和来源.
|
|
||||||
|
|
||||||
Powered by [阿里拍卖前端团队](https://github.com/alibaba-paimai-frontend)<img src="https://img.alicdn.com/tfs/TB1foEhAMHqK1RjSZJnXXbNLpXa-166-166.png" width=20 height=20>
|
|
||||||
|
|
||||||
+++++++
|
|
@ -1,17 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>android</name>
|
|
||||||
<comment>Project android created by Buildship.</comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,2 +0,0 @@
|
|||||||
connection.project.dir=
|
|
||||||
eclipse.preferences.version=1
|
|
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
|
||||||
<classpathentry kind="output" path="bin/default"/>
|
|
||||||
</classpath>
|
|
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>app</name>
|
|
||||||
<comment>Project app created by Buildship.</comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
@ -1,2 +0,0 @@
|
|||||||
connection.project.dir=..
|
|
||||||
eclipse.preferences.version=1
|
|
@ -1,95 +0,0 @@
|
|||||||
def localProperties = new Properties()
|
|
||||||
def localPropertiesFile = rootProject.file('local.properties')
|
|
||||||
if (localPropertiesFile.exists()) {
|
|
||||||
localPropertiesFile.withReader('UTF-8') { reader ->
|
|
||||||
localProperties.load(reader)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterRoot = localProperties.getProperty('flutter.sdk')
|
|
||||||
if (flutterRoot == null) {
|
|
||||||
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
|
||||||
if (flutterVersionCode == null) {
|
|
||||||
flutterVersionCode = '1'
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
|
||||||
if (flutterVersionName == null) {
|
|
||||||
flutterVersionName = '1.0'
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
|
||||||
apply plugin: 'kotlin-android'
|
|
||||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
|
||||||
|
|
||||||
def keystoreProperties = new Properties()
|
|
||||||
def keystorePropertiesFile = rootProject.file('key.properties')
|
|
||||||
if (keystorePropertiesFile.exists()) {
|
|
||||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdkVersion 28
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
|
||||||
}
|
|
||||||
|
|
||||||
lintOptions {
|
|
||||||
disable 'InvalidPackage'
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
|
||||||
applicationId "com.alibaba.fluttergo"
|
|
||||||
minSdkVersion 16
|
|
||||||
targetSdkVersion 28
|
|
||||||
versionCode flutterVersionCode.toInteger()
|
|
||||||
versionName flutterVersionName
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
||||||
}
|
|
||||||
|
|
||||||
signingConfigs {
|
|
||||||
release {
|
|
||||||
keyAlias keystoreProperties['keyAlias']
|
|
||||||
keyPassword keystoreProperties['keyPassword']
|
|
||||||
storeFile file(keystoreProperties['storeFile'])
|
|
||||||
storePassword keystoreProperties['storePassword']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
signingConfig signingConfigs.release
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
flutter {
|
|
||||||
source '../..'
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
||||||
testImplementation 'junit:junit:4.12'
|
|
||||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
|
||||||
//firebase
|
|
||||||
implementation 'com.google.firebase:firebase-core:16.0.8'
|
|
||||||
//Crashlytics SDK
|
|
||||||
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
|
|
||||||
// 性能监控
|
|
||||||
///implementation 'com.google.firebase:firebase-perf:16.2.3'
|
|
||||||
// 登陆
|
|
||||||
////implementation 'com.google.firebase:firebase-auth:16.0.3'
|
|
||||||
}
|
|
||||||
//firebase
|
|
||||||
apply plugin: 'com.google.gms.google-services'
|
|
||||||
//Crashlytics SDK
|
|
||||||
apply plugin: 'io.fabric'
|
|
||||||
// 性能监控
|
|
||||||
///apply plugin: 'com.google.firebase.firebase-perf'
|
|
@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"project_info": {
|
|
||||||
"project_number": "611157827052",
|
|
||||||
"firebase_url": "https://alibaba-flutter-go.firebaseio.com",
|
|
||||||
"project_id": "alibaba-flutter-go",
|
|
||||||
"storage_bucket": "alibaba-flutter-go.appspot.com"
|
|
||||||
},
|
|
||||||
"client": [
|
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:611157827052:android:c6129e5eff2f125d",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "com.alibaba.fluttergo"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "611157827052-iiuevj8qu56alpqh47v37j9sd4e40di7.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyA9chxDIuds7gmPQTJPpDpoXyN9rDTdvhU"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "611157827052-iiuevj8qu56alpqh47v37j9sd4e40di7.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"configuration_version": "1"
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.0.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
|
@ -1,7 +0,0 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.alibaba.fluttergo">
|
|
||||||
<!-- Flutter needs it to communicate with the running application
|
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
|
||||||
-->
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
|
||||||
</manifest>
|
|
@ -1,38 +0,0 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.alibaba.fluttergo">
|
|
||||||
|
|
||||||
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
|
|
||||||
calls FlutterMain.startInitialization(this); in its onCreate method.
|
|
||||||
In most cases you can leave this as-is, but you if you want to provide
|
|
||||||
additional functionality it is fine to subclass or reimplement
|
|
||||||
FlutterApplication and put your custom class here. -->
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
|
||||||
<uses-permission android:name="android.permission.MODE_WORLD_READABLE"/>
|
|
||||||
<uses-permission android:name="android.permission.MODE_WORLD_WRITEABLE"/>
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:name="io.flutter.app.FlutterApplication"
|
|
||||||
android:label="fluttergo"
|
|
||||||
android:icon="@mipmap/ic_launcher_logo">
|
|
||||||
<activity
|
|
||||||
android:name=".MainActivity"
|
|
||||||
android:launchMode="singleTop"
|
|
||||||
android:theme="@style/LaunchTheme"
|
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
|
||||||
android:hardwareAccelerated="true"
|
|
||||||
android:windowSoftInputMode="adjustResize">
|
|
||||||
<!-- This keeps the window background of the activity showing
|
|
||||||
until Flutter renders its first frame. It can be removed if
|
|
||||||
there is no splash screen (such as the default splash screen
|
|
||||||
defined in @style/LaunchTheme). -->
|
|
||||||
<meta-data
|
|
||||||
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
|
|
||||||
android:value="true" />
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
</manifest>
|
|
@ -1,13 +0,0 @@
|
|||||||
package com.alibaba.fluttergo
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
|
|
||||||
import io.flutter.app.FlutterActivity
|
|
||||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
|
||||||
|
|
||||||
class MainActivity: FlutterActivity() {
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
GeneratedPluginRegistrant.registerWith(this)
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 2.7 KiB |
@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Modify this file to customize your launch splash screen -->
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item android:drawable="@android:color/white" />
|
|
||||||
|
|
||||||
<!-- You can insert your own image assets here -->
|
|
||||||
<item>
|
|
||||||
<bitmap
|
|
||||||
android:src="@drawable/splash" />
|
|
||||||
</item>
|
|
||||||
</layer-list>
|
|
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 197 KiB |
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@drawable/splash">
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
Before Width: | Height: | Size: 544 B |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 442 B |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 721 B |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.0 MiB |
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
|
||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
|
||||||
Flutter draws its first frame -->
|
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
@ -1,7 +0,0 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.alibaba.fluttergo">
|
|
||||||
<!-- Flutter needs it to communicate with the running application
|
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
|
||||||
-->
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
|
||||||
</manifest>
|
|
@ -1,45 +0,0 @@
|
|||||||
buildscript {
|
|
||||||
ext.kotlin_version = '1.3.0'
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
//Crashlytics SDK
|
|
||||||
maven {
|
|
||||||
url 'https://maven.fabric.io/public'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath 'com.android.tools.build:gradle:3.3.0'
|
|
||||||
//firebase
|
|
||||||
classpath 'com.google.gms:google-services:4.2.0'
|
|
||||||
//Crashlytics SDK
|
|
||||||
classpath 'io.fabric.tools:gradle:1.26.1'
|
|
||||||
// 性能监控
|
|
||||||
///classpath 'com.google.firebase:firebase-plugins:1.1.5'
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
//Crashlytics SDK
|
|
||||||
maven {
|
|
||||||
url 'https://maven.google.com/'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rootProject.buildDir = '../build'
|
|
||||||
subprojects {
|
|
||||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
|
||||||
}
|
|
||||||
subprojects {
|
|
||||||
project.evaluationDependsOn(':app')
|
|
||||||
}
|
|
||||||
|
|
||||||
task clean(type: Delete) {
|
|
||||||
delete rootProject.buildDir
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
org.gradle.jvmargs=-Xmx1536M
|
|
||||||
android.enableJetifier=true
|
|
||||||
android.useAndroidX=true
|
|
@ -1,6 +0,0 @@
|
|||||||
#Thu Jan 10 15:37:36 CST 2019
|
|
||||||
distributionBase=GRADLE_USER_HOME
|
|
||||||
distributionPath=wrapper/dists
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
|
|
@ -1,4 +0,0 @@
|
|||||||
storePassword=fluttergo123
|
|
||||||
keyPassword=fluttergo123
|
|
||||||
keyAlias=key
|
|
||||||
storeFile=/Users/xj.deng/key.jks
|
|
@ -1,15 +0,0 @@
|
|||||||
include ':app'
|
|
||||||
|
|
||||||
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
|
|
||||||
|
|
||||||
def plugins = new Properties()
|
|
||||||
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
|
|
||||||
if (pluginsFile.exists()) {
|
|
||||||
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
|
|
||||||
}
|
|
||||||
|
|
||||||
plugins.each { name, path ->
|
|
||||||
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
|
|
||||||
include ":$name"
|
|
||||||
project(":$name").projectDir = pluginDirectory
|
|
||||||
}
|
|
BIN
assets/app.db
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 555 B |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 978 B |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 853 KiB |
Before Width: | Height: | Size: 871 KiB |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 185 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 118 KiB |
160
develop.md
@ -1,160 +0,0 @@
|
|||||||
# flutter-common-widgets-app
|
|
||||||
|
|
||||||
### 使用背景
|
|
||||||
* 鉴于目前flutter官方庞大的小部件(widget)系统以及api文档,只有文字描述,而没有可视化实例。
|
|
||||||
* 我们开发这套app,可以系统的看到常用小部件(widget)的用法。
|
|
||||||
* 辅助初学者更快上手,flutter官方小部件(widget)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 参考资料
|
|
||||||
|
|
||||||
* [flutter-widgets的官方库地址]( https://docs.flutter.kim/widgets/widgets-library.html )
|
|
||||||
* [flutter-widgets的官方目录集]( http://doc.flutter-dev.cn/widgets/ )
|
|
||||||
* [sqlitestudio 本地可视化工具] (https://sqlitestudio.pl/index.rvt)
|
|
||||||
|
|
||||||
### 分支命名及使用规范
|
|
||||||
|
|
||||||
* 分支命名规范
|
|
||||||
- 自己开发分支命名统一为 username ,如:yifeng
|
|
||||||
- 分支两条主线为 Master分支和develop分支
|
|
||||||
- Master作为发布分支,develop作为开发测试分支、自己开发分支从dev checkout出去,发布即 merge to master
|
|
||||||
|
|
||||||
* 分支合并规范
|
|
||||||
- 从最新的develop分支checkout出自己的开发分支
|
|
||||||
- 在自己开发开发分支开发完成后,先去develop分支pull最新代码,
|
|
||||||
- 将develop 分支最新代码 merge 到自己分支,确保无冲突
|
|
||||||
- 再切回develop分支merge自己开发分支代码,确保无冲突,且能正常运行
|
|
||||||
|
|
||||||
### commit 提交规范
|
|
||||||
* $git cz
|
|
||||||
|
|
||||||
* 用于说明 commit 的类别,只允许使用下面7个标识。
|
|
||||||
|
|
||||||
- feat:新功能(feature)
|
|
||||||
|
|
||||||
- fix:修补bug
|
|
||||||
|
|
||||||
- docs:文档(documentation)
|
|
||||||
|
|
||||||
- style: 格式(不影响代码运行的变动)
|
|
||||||
|
|
||||||
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
|
|
||||||
|
|
||||||
- test:增加测试
|
|
||||||
|
|
||||||
- chore:构建过程或辅助工具的变动
|
|
||||||
|
|
||||||
|
|
||||||
### 代码规范
|
|
||||||
* 文件命名规范
|
|
||||||
- 文件命名使用下划线命名法,如:hello_world
|
|
||||||
- 请使用英文进行命名,不允许使用拼音。命名要求具有可读性,尽量避免使用缩写与数字
|
|
||||||
- 未完待续
|
|
||||||
|
|
||||||
* 代码编码规范
|
|
||||||
- 文件编码统一使用 UTF-8 编码;
|
|
||||||
- 前端编码采用首字母小写驼峰法. Widget Class 必须采用首字母大写驼峰法.
|
|
||||||
|
|
||||||
### 文件目录结构(以LIb文件说明)
|
|
||||||
|
|
||||||
- lib
|
|
||||||
- main.dart 入口文件
|
|
||||||
- common 公共的method
|
|
||||||
- components widget
|
|
||||||
- generated
|
|
||||||
- model 存放模型, 不应该加入逻辑层
|
|
||||||
- router 路由
|
|
||||||
- views 展示界面
|
|
||||||
- widget (与components概念重合,废弃)
|
|
||||||
|
|
||||||
``` javascript
|
|
||||||
├── main.dart //入口文件
|
|
||||||
├── common 公共的method
|
|
||||||
│ ├── Style.dart
|
|
||||||
│ ├── eventBus.dart
|
|
||||||
│ ├── provider.dart
|
|
||||||
│ └── sql.dart
|
|
||||||
├── components //app展示框架用到的组件
|
|
||||||
│ ├── Input.dart
|
|
||||||
│ ├── List.dart
|
|
||||||
│ ├── Pagination.dart
|
|
||||||
│ ├── Pagination2.dart
|
|
||||||
│ ├── SearchInput.dart
|
|
||||||
│ └── homeBanner.dart
|
|
||||||
├── generated
|
|
||||||
│ └── i18n.dart
|
|
||||||
├── model //本地存放模型, 不应该加入逻辑层
|
|
||||||
│ ├── base.dart
|
|
||||||
│ ├── cat.dart
|
|
||||||
│ ├── story.dart
|
|
||||||
│ └── widget.dart
|
|
||||||
├── routers //路由
|
|
||||||
│ ├── application.dart
|
|
||||||
│ ├── router_handler.dart
|
|
||||||
│ └── routers.dart
|
|
||||||
├── views //app展示界面
|
|
||||||
│ ├── Detail.dart
|
|
||||||
│ ├── FirstPage.dart
|
|
||||||
│ ├── FourthPage.dart
|
|
||||||
│ ├── ThirdPage.dart
|
|
||||||
│ ├── category.dart
|
|
||||||
│ ├── demos
|
|
||||||
│ │ ├── home.dart
|
|
||||||
│ │ └── layout
|
|
||||||
│ │ ├── SamplePage.dart
|
|
||||||
│ │ └── layout_type.dart
|
|
||||||
│ └── widgetPage.dart
|
|
||||||
└── widgets
|
|
||||||
└── ... //下面详细说明
|
|
||||||
```
|
|
||||||
|
|
||||||
``` javascript
|
|
||||||
└── widgets // 对flutter所有元素和组件的分类
|
|
||||||
├── 404.dart
|
|
||||||
├── index.dart // widgets 的总入口文件
|
|
||||||
├── components // 组件的分类 (区别于上面的components)
|
|
||||||
│ └── index.dart
|
|
||||||
├── elements // 基础元素的分类
|
|
||||||
│ ├── index.dart // elements下的 elements 类型入口文件
|
|
||||||
│ ├── Form // elements下的 From 类型集合
|
|
||||||
│ │ ├── Button // button 元素,里面是 文件夹代表类名/index.dart
|
|
||||||
│ │ │ ├── FlatButton
|
|
||||||
│ │ │ │ └── index.dart
|
|
||||||
│ │ │ ├── RaisedButton
|
|
||||||
│ │ │ │ └── index.dart
|
|
||||||
│ │ │ └── index.dart
|
|
||||||
│ │ ├── CheckBox
|
|
||||||
│ │ ├── Input
|
|
||||||
│ │ ├── Radio
|
|
||||||
│ │ ├── Slider
|
|
||||||
│ │ ├── Switch
|
|
||||||
│ │ ├── Text
|
|
||||||
│ │ └── index.dart
|
|
||||||
│ ├── Frame // elements下的 Frame 类型集合
|
|
||||||
│ │ ├── Align
|
|
||||||
│ │ ├── Axis
|
|
||||||
│ │ ├── Box
|
|
||||||
│ │ ├── Expanded
|
|
||||||
│ │ ├── Layout
|
|
||||||
│ │ ├── Stack
|
|
||||||
│ │ ├── Table
|
|
||||||
│ │ └── spacing
|
|
||||||
│ └── Media // elements下的 Media 类型集合
|
|
||||||
│ ├── Canvas
|
|
||||||
│ ├── Icon
|
|
||||||
│ └── Image
|
|
||||||
└── themes
|
|
||||||
└── index.dart
|
|
||||||
```
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
widget 里的文件结构,用来存放封装的逻辑组件, 文件目录应为, 类比rax
|
|
||||||
- widget // widget 下详细元素或组件的目录结构
|
|
||||||
- hello-world // 例如
|
|
||||||
- mods // (可选, 子模块)
|
|
||||||
- mocks // (可选)
|
|
||||||
- utils // (可选, 存放暂时的私有method)
|
|
||||||
- schema
|
|
||||||
- index.dart
|
|
||||||
```
|
|
Before Width: | Height: | Size: 360 KiB |
Before Width: | Height: | Size: 673 KiB |
Before Width: | Height: | Size: 215 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 192 KiB |
BIN
docs/jiegou.png
Before Width: | Height: | Size: 106 KiB |
BIN
flutter_01.png
Before Width: | Height: | Size: 41 KiB |
45
ios/.gitignore
vendored
@ -1,45 +0,0 @@
|
|||||||
.idea/
|
|
||||||
.vagrant/
|
|
||||||
.sconsign.dblite
|
|
||||||
.svn/
|
|
||||||
|
|
||||||
.DS_Store
|
|
||||||
*.swp
|
|
||||||
profile
|
|
||||||
|
|
||||||
DerivedData/
|
|
||||||
build/
|
|
||||||
GeneratedPluginRegistrant.h
|
|
||||||
GeneratedPluginRegistrant.m
|
|
||||||
|
|
||||||
.generated/
|
|
||||||
|
|
||||||
*.pbxuser
|
|
||||||
*.mode1v3
|
|
||||||
*.mode2v3
|
|
||||||
*.perspectivev3
|
|
||||||
|
|
||||||
!default.pbxuser
|
|
||||||
!default.mode1v3
|
|
||||||
!default.mode2v3
|
|
||||||
!default.perspectivev3
|
|
||||||
|
|
||||||
xcuserdata
|
|
||||||
|
|
||||||
*.moved-aside
|
|
||||||
|
|
||||||
*.pyc
|
|
||||||
*sync/
|
|
||||||
Icon?
|
|
||||||
.tags*
|
|
||||||
|
|
||||||
/Flutter/app.flx
|
|
||||||
/Flutter/app.zip
|
|
||||||
/Flutter/flutter_assets/
|
|
||||||
/Flutter/App.framework
|
|
||||||
/Flutter/Flutter.framework
|
|
||||||
/Flutter/Generated.xcconfig
|
|
||||||
/ServiceDefinitions.json
|
|
||||||
|
|
||||||
Pods/
|
|
||||||
.symlinks/
|
|
@ -1,26 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>App</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>io.flutter.flutter.app</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>App</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>FMWK</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>MinimumOSVersion</key>
|
|
||||||
<string>8.0</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,2 +0,0 @@
|
|||||||
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
|
||||||
#include "Generated.xcconfig"
|
|
@ -1,2 +0,0 @@
|
|||||||
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
|
||||||
#include "Generated.xcconfig"
|
|
63
ios/Podfile
@ -1,63 +0,0 @@
|
|||||||
# Uncomment this line to define a global platform for your project
|
|
||||||
# platform :ios, '9.0'
|
|
||||||
|
|
||||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
|
||||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
|
||||||
|
|
||||||
def parse_KV_file(file, separator='=')
|
|
||||||
file_abs_path = File.expand_path(file)
|
|
||||||
if !File.exists? file_abs_path
|
|
||||||
return [];
|
|
||||||
end
|
|
||||||
pods_ary = []
|
|
||||||
skip_line_start_symbols = ["#", "/"]
|
|
||||||
File.foreach(file_abs_path) { |line|
|
|
||||||
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
|
||||||
plugin = line.split(pattern=separator)
|
|
||||||
if plugin.length == 2
|
|
||||||
podname = plugin[0].strip()
|
|
||||||
path = plugin[1].strip()
|
|
||||||
podpath = File.expand_path("#{path}", file_abs_path)
|
|
||||||
pods_ary.push({:name => podname, :path => podpath});
|
|
||||||
else
|
|
||||||
puts "Invalid plugin specification: #{line}"
|
|
||||||
end
|
|
||||||
}
|
|
||||||
return pods_ary
|
|
||||||
end
|
|
||||||
|
|
||||||
target 'Runner' do
|
|
||||||
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
|
|
||||||
# referring to absolute paths on developers' machines.
|
|
||||||
system('rm -rf .symlinks')
|
|
||||||
system('mkdir -p .symlinks/plugins')
|
|
||||||
|
|
||||||
# Flutter Pods
|
|
||||||
generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')
|
|
||||||
if generated_xcode_build_settings.empty?
|
|
||||||
puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first."
|
|
||||||
end
|
|
||||||
generated_xcode_build_settings.map { |p|
|
|
||||||
if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
|
|
||||||
symlink = File.join('.symlinks', 'flutter')
|
|
||||||
File.symlink(File.dirname(p[:path]), symlink)
|
|
||||||
pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
# Plugin Pods
|
|
||||||
plugin_pods = parse_KV_file('../.flutter-plugins')
|
|
||||||
plugin_pods.map { |p|
|
|
||||||
symlink = File.join('.symlinks', 'plugins', p[:name])
|
|
||||||
File.symlink(p[:path], symlink)
|
|
||||||
pod p[:name], :path => File.join(symlink, 'ios')
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
post_install do |installer|
|
|
||||||
installer.pods_project.targets.each do |target|
|
|
||||||
target.build_configurations.each do |config|
|
|
||||||
config.build_settings['ENABLE_BITCODE'] = 'NO'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,588 +0,0 @@
|
|||||||
// !$*UTF8*$!
|
|
||||||
{
|
|
||||||
archiveVersion = 1;
|
|
||||||
classes = {
|
|
||||||
};
|
|
||||||
objectVersion = 46;
|
|
||||||
objects = {
|
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
|
||||||
0828E495220692B500A59437 /* iPhone Portrait-Retina 4.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E486220692B400A59437 /* iPhone Portrait-Retina 4.png */; };
|
|
||||||
0828E496220692B500A59437 /* iPad Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E487220692B400A59437 /* iPad Portrait.png */; };
|
|
||||||
0828E497220692B500A59437 /* iPhone X_XS Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E488220692B400A59437 /* iPhone X_XS Landscape.png */; };
|
|
||||||
0828E498220692B500A59437 /* iPhone XS Max Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E489220692B400A59437 /* iPhone XS Max Portrait.png */; };
|
|
||||||
0828E499220692B500A59437 /* iPhone Portrait-Retina HD 4.7.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48A220692B400A59437 /* iPhone Portrait-Retina HD 4.7.png */; };
|
|
||||||
0828E49A220692B500A59437 /* iPhone X_XS Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48B220692B400A59437 /* iPhone X_XS Portrait.png */; };
|
|
||||||
0828E49B220692B500A59437 /* iPad Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48C220692B400A59437 /* iPad Landscape@2x.png */; };
|
|
||||||
0828E49C220692B500A59437 /* iPhone Landscape-Retina HD 5.5.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48D220692B400A59437 /* iPhone Landscape-Retina HD 5.5.png */; };
|
|
||||||
0828E49D220692B500A59437 /* iPhone Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48E220692B400A59437 /* iPhone Portrait@2x.png */; };
|
|
||||||
0828E49E220692B500A59437 /* iPad Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E48F220692B400A59437 /* iPad Portrait@2x.png */; };
|
|
||||||
0828E49F220692B500A59437 /* iPhone XS Max Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E490220692B400A59437 /* iPhone XS Max Landscape.png */; };
|
|
||||||
0828E4A0220692B500A59437 /* iPad Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E491220692B500A59437 /* iPad Landscape.png */; };
|
|
||||||
0828E4A1220692B500A59437 /* iPhone XR Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E492220692B500A59437 /* iPhone XR Portrait.png */; };
|
|
||||||
0828E4A2220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E493220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png */; };
|
|
||||||
0828E4A3220692B500A59437 /* iPhone XR Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 0828E494220692B500A59437 /* iPhone XR Landscape.png */; };
|
|
||||||
0828E4A52206936100A59437 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0828E4A42206936100A59437 /* Images.xcassets */; };
|
|
||||||
084A20882202E4FD00428FF5 /* flutter go.png in Resources */ = {isa = PBXBuildFile; fileRef = 084A20872202E4FD00428FF5 /* flutter go.png */; };
|
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
|
||||||
333E5DAE7FC10AC69FEC26C0 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA792F029EDD7A11295D192 /* libPods-Runner.a */; };
|
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
|
||||||
3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
|
|
||||||
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
|
||||||
94722E5C22511D3600F63900 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 94722E5B22511D3600F63900 /* GoogleService-Info.plist */; };
|
|
||||||
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
|
|
||||||
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
|
||||||
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
|
|
||||||
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
|
|
||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
|
||||||
/* End PBXBuildFile section */
|
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
|
||||||
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
|
|
||||||
isa = PBXCopyFilesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
dstPath = "";
|
|
||||||
dstSubfolderSpec = 10;
|
|
||||||
files = (
|
|
||||||
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
|
|
||||||
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
|
|
||||||
);
|
|
||||||
name = "Embed Frameworks";
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXCopyFilesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
|
||||||
0828E486220692B400A59437 /* iPhone Portrait-Retina 4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait-Retina 4.png"; sourceTree = "<group>"; };
|
|
||||||
0828E487220692B400A59437 /* iPad Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Portrait.png"; sourceTree = "<group>"; };
|
|
||||||
0828E488220692B400A59437 /* iPhone X_XS Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone X_XS Landscape.png"; sourceTree = "<group>"; };
|
|
||||||
0828E489220692B400A59437 /* iPhone XS Max Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XS Max Portrait.png"; sourceTree = "<group>"; };
|
|
||||||
0828E48A220692B400A59437 /* iPhone Portrait-Retina HD 4.7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait-Retina HD 4.7.png"; sourceTree = "<group>"; };
|
|
||||||
0828E48B220692B400A59437 /* iPhone X_XS Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone X_XS Portrait.png"; sourceTree = "<group>"; };
|
|
||||||
0828E48C220692B400A59437 /* iPad Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Landscape@2x.png"; sourceTree = "<group>"; };
|
|
||||||
0828E48D220692B400A59437 /* iPhone Landscape-Retina HD 5.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Landscape-Retina HD 5.5.png"; sourceTree = "<group>"; };
|
|
||||||
0828E48E220692B400A59437 /* iPhone Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait@2x.png"; sourceTree = "<group>"; };
|
|
||||||
0828E48F220692B400A59437 /* iPad Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Portrait@2x.png"; sourceTree = "<group>"; };
|
|
||||||
0828E490220692B400A59437 /* iPhone XS Max Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XS Max Landscape.png"; sourceTree = "<group>"; };
|
|
||||||
0828E491220692B500A59437 /* iPad Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPad Landscape.png"; sourceTree = "<group>"; };
|
|
||||||
0828E492220692B500A59437 /* iPhone XR Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XR Portrait.png"; sourceTree = "<group>"; };
|
|
||||||
0828E493220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone Portrait-Retina HD 5.5.png"; sourceTree = "<group>"; };
|
|
||||||
0828E494220692B500A59437 /* iPhone XR Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iPhone XR Landscape.png"; sourceTree = "<group>"; };
|
|
||||||
0828E4A42206936100A59437 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
|
||||||
084A20872202E4FD00428FF5 /* flutter go.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flutter go.png"; sourceTree = "<group>"; };
|
|
||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
|
||||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
|
||||||
3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
|
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
|
||||||
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
|
||||||
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
|
||||||
94722E5B22511D3600F63900 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
|
|
||||||
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
|
|
||||||
9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; };
|
|
||||||
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
|
||||||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
|
||||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
|
||||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
|
||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
|
||||||
A9941E6EA19A9CEF6B117A70 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
|
||||||
CBA6E34746642008D95A119D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
|
||||||
DDA792F029EDD7A11295D192 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
/* End PBXFileReference section */
|
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
|
|
||||||
3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
|
|
||||||
333E5DAE7FC10AC69FEC26C0 /* libPods-Runner.a in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXFrameworksBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
|
||||||
0828E485220692A700A59437 /* launch */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
0828E491220692B500A59437 /* iPad Landscape.png */,
|
|
||||||
0828E48C220692B400A59437 /* iPad Landscape@2x.png */,
|
|
||||||
0828E48F220692B400A59437 /* iPad Portrait@2x.png */,
|
|
||||||
0828E487220692B400A59437 /* iPad Portrait.png */,
|
|
||||||
0828E48D220692B400A59437 /* iPhone Landscape-Retina HD 5.5.png */,
|
|
||||||
0828E486220692B400A59437 /* iPhone Portrait-Retina 4.png */,
|
|
||||||
0828E48A220692B400A59437 /* iPhone Portrait-Retina HD 4.7.png */,
|
|
||||||
0828E493220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png */,
|
|
||||||
0828E48E220692B400A59437 /* iPhone Portrait@2x.png */,
|
|
||||||
0828E488220692B400A59437 /* iPhone X_XS Landscape.png */,
|
|
||||||
0828E48B220692B400A59437 /* iPhone X_XS Portrait.png */,
|
|
||||||
0828E494220692B500A59437 /* iPhone XR Landscape.png */,
|
|
||||||
0828E492220692B500A59437 /* iPhone XR Portrait.png */,
|
|
||||||
0828E490220692B400A59437 /* iPhone XS Max Landscape.png */,
|
|
||||||
0828E489220692B400A59437 /* iPhone XS Max Portrait.png */,
|
|
||||||
);
|
|
||||||
path = launch;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
0C172CA58CDB230D5DA80034 /* Pods */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
CBA6E34746642008D95A119D /* Pods-Runner.debug.xcconfig */,
|
|
||||||
A9941E6EA19A9CEF6B117A70 /* Pods-Runner.release.xcconfig */,
|
|
||||||
);
|
|
||||||
name = Pods;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
2EC8A3499721CE770475DCE7 /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
DDA792F029EDD7A11295D192 /* libPods-Runner.a */,
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
9740EEB11CF90186004384FC /* Flutter */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
3B80C3931E831B6300D905FE /* App.framework */,
|
|
||||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
|
|
||||||
9740EEBA1CF902C7004384FC /* Flutter.framework */,
|
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */,
|
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
|
|
||||||
9740EEB31CF90195004384FC /* Generated.xcconfig */,
|
|
||||||
);
|
|
||||||
name = Flutter;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
97C146E51CF9000F007C117D = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
0828E485220692A700A59437 /* launch */,
|
|
||||||
084A20872202E4FD00428FF5 /* flutter go.png */,
|
|
||||||
9740EEB11CF90186004384FC /* Flutter */,
|
|
||||||
97C146F01CF9000F007C117D /* Runner */,
|
|
||||||
97C146EF1CF9000F007C117D /* Products */,
|
|
||||||
0C172CA58CDB230D5DA80034 /* Pods */,
|
|
||||||
2EC8A3499721CE770475DCE7 /* Frameworks */,
|
|
||||||
);
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
97C146EF1CF9000F007C117D /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
97C146EE1CF9000F007C117D /* Runner.app */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
97C146F01CF9000F007C117D /* Runner */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
94722E5B22511D3600F63900 /* GoogleService-Info.plist */,
|
|
||||||
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
|
|
||||||
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
|
|
||||||
97C146FA1CF9000F007C117D /* Main.storyboard */,
|
|
||||||
97C146FD1CF9000F007C117D /* Assets.xcassets */,
|
|
||||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
|
|
||||||
97C147021CF9000F007C117D /* Info.plist */,
|
|
||||||
97C146F11CF9000F007C117D /* Supporting Files */,
|
|
||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
|
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
|
|
||||||
0828E4A42206936100A59437 /* Images.xcassets */,
|
|
||||||
);
|
|
||||||
path = Runner;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
97C146F11CF9000F007C117D /* Supporting Files */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
97C146F21CF9000F007C117D /* main.m */,
|
|
||||||
);
|
|
||||||
name = "Supporting Files";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
|
||||||
97C146ED1CF9000F007C117D /* Runner */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
|
||||||
buildPhases = (
|
|
||||||
443E32A5789BE5CCDA6B5E59 /* [CP] Check Pods Manifest.lock */,
|
|
||||||
9740EEB61CF901F6004384FC /* Run Script */,
|
|
||||||
97C146EA1CF9000F007C117D /* Sources */,
|
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
|
||||||
97C146EC1CF9000F007C117D /* Resources */,
|
|
||||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
|
||||||
C38E5EAE601417DA9DF11753 /* [CP] Embed Pods Frameworks */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = Runner;
|
|
||||||
productName = Runner;
|
|
||||||
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
|
|
||||||
productType = "com.apple.product-type.application";
|
|
||||||
};
|
|
||||||
/* End PBXNativeTarget section */
|
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
|
||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
|
||||||
isa = PBXProject;
|
|
||||||
attributes = {
|
|
||||||
LastUpgradeCheck = 1000;
|
|
||||||
ORGANIZATIONNAME = "The Chromium Authors";
|
|
||||||
TargetAttributes = {
|
|
||||||
97C146ED1CF9000F007C117D = {
|
|
||||||
CreatedOnToolsVersion = 7.3.1;
|
|
||||||
DevelopmentTeam = 4WLT68XRNA;
|
|
||||||
ProvisioningStyle = Manual;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
|
|
||||||
compatibilityVersion = "Xcode 3.2";
|
|
||||||
developmentRegion = English;
|
|
||||||
hasScannedForEncodings = 0;
|
|
||||||
knownRegions = (
|
|
||||||
English,
|
|
||||||
en,
|
|
||||||
Base,
|
|
||||||
);
|
|
||||||
mainGroup = 97C146E51CF9000F007C117D;
|
|
||||||
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
|
|
||||||
projectDirPath = "";
|
|
||||||
projectRoot = "";
|
|
||||||
targets = (
|
|
||||||
97C146ED1CF9000F007C117D /* Runner */,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
/* End PBXProject section */
|
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */
|
|
||||||
97C146EC1CF9000F007C117D /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
0828E4A0220692B500A59437 /* iPad Landscape.png in Resources */,
|
|
||||||
0828E4A1220692B500A59437 /* iPhone XR Portrait.png in Resources */,
|
|
||||||
0828E49F220692B500A59437 /* iPhone XS Max Landscape.png in Resources */,
|
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
|
||||||
0828E4A3220692B500A59437 /* iPhone XR Landscape.png in Resources */,
|
|
||||||
0828E4A2220692B500A59437 /* iPhone Portrait-Retina HD 5.5.png in Resources */,
|
|
||||||
0828E49A220692B500A59437 /* iPhone X_XS Portrait.png in Resources */,
|
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
|
||||||
0828E49E220692B500A59437 /* iPad Portrait@2x.png in Resources */,
|
|
||||||
0828E49D220692B500A59437 /* iPhone Portrait@2x.png in Resources */,
|
|
||||||
0828E499220692B500A59437 /* iPhone Portrait-Retina HD 4.7.png in Resources */,
|
|
||||||
084A20882202E4FD00428FF5 /* flutter go.png in Resources */,
|
|
||||||
0828E497220692B500A59437 /* iPhone X_XS Landscape.png in Resources */,
|
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
|
||||||
0828E4A52206936100A59437 /* Images.xcassets in Resources */,
|
|
||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
|
||||||
0828E49B220692B500A59437 /* iPad Landscape@2x.png in Resources */,
|
|
||||||
0828E495220692B500A59437 /* iPhone Portrait-Retina 4.png in Resources */,
|
|
||||||
0828E498220692B500A59437 /* iPhone XS Max Portrait.png in Resources */,
|
|
||||||
94722E5C22511D3600F63900 /* GoogleService-Info.plist in Resources */,
|
|
||||||
0828E496220692B500A59437 /* iPad Portrait.png in Resources */,
|
|
||||||
0828E49C220692B500A59437 /* iPhone Landscape-Retina HD 5.5.png in Resources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXResourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Thin Binary";
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
|
|
||||||
};
|
|
||||||
443E32A5789BE5CCDA6B5E59 /* [CP] Check Pods Manifest.lock */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
|
||||||
"${PODS_ROOT}/Manifest.lock",
|
|
||||||
);
|
|
||||||
name = "[CP] Check Pods Manifest.lock";
|
|
||||||
outputPaths = (
|
|
||||||
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
9740EEB61CF901F6004384FC /* Run Script */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Run Script";
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
|
||||||
};
|
|
||||||
C38E5EAE601417DA9DF11753 /* [CP] Embed Pods Frameworks */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
|
|
||||||
"${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework",
|
|
||||||
);
|
|
||||||
name = "[CP] Embed Pods Frameworks";
|
|
||||||
outputPaths = (
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
/* End PBXShellScriptBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
|
||||||
97C146EA1CF9000F007C117D /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
|
|
||||||
97C146F31CF9000F007C117D /* main.m in Sources */,
|
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXSourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
|
||||||
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
97C146FB1CF9000F007C117D /* Base */,
|
|
||||||
);
|
|
||||||
name = Main.storyboard;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
97C147001CF9000F007C117D /* Base */,
|
|
||||||
);
|
|
||||||
name = LaunchScreen.storyboard;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXVariantGroup section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
|
||||||
97C147031CF9000F007C117D /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_COMMA = YES;
|
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
||||||
ENABLE_TESTABILITY = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
||||||
"DEBUG=1",
|
|
||||||
"$(inherited)",
|
|
||||||
);
|
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
97C147041CF9000F007C117D /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
|
||||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_COMMA = YES;
|
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
VALIDATE_PRODUCT = YES;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
97C147061CF9000F007C117D /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
|
||||||
buildSettings = {
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
||||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = Launch2;
|
|
||||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
|
||||||
CODE_SIGN_STYLE = Manual;
|
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
|
||||||
DEVELOPMENT_TEAM = 4WLT68XRNA;
|
|
||||||
ENABLE_BITCODE = NO;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PROJECT_DIR)/Flutter",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PROJECT_DIR)/Flutter",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.alibaba.fluttergo;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
PROVISIONING_PROFILE_SPECIFIER = FlutterGO_alibaba_distribution_app_store;
|
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
97C147071CF9000F007C117D /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
|
||||||
buildSettings = {
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
||||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = Launch2;
|
|
||||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
|
||||||
CODE_SIGN_STYLE = Manual;
|
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
|
||||||
DEVELOPMENT_TEAM = 4WLT68XRNA;
|
|
||||||
ENABLE_BITCODE = NO;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PROJECT_DIR)/Flutter",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"$(PROJECT_DIR)/Flutter",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.alibaba.fluttergo;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
PROVISIONING_PROFILE_SPECIFIER = FlutterGO_alibaba_distribution_ad_hoc;
|
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
/* End XCBuildConfiguration section */
|
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
|
||||||
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
97C147031CF9000F007C117D /* Debug */,
|
|
||||||
97C147041CF9000F007C117D /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
97C147061CF9000F007C117D /* Debug */,
|
|
||||||
97C147071CF9000F007C117D /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
/* End XCConfigurationList section */
|
|
||||||
};
|
|
||||||
rootObject = 97C146E61CF9000F007C117D /* Project object */;
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "group:Runner.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
@ -1,91 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Scheme
|
|
||||||
LastUpgradeVersion = "1000"
|
|
||||||
version = "1.3">
|
|
||||||
<BuildAction
|
|
||||||
parallelizeBuildables = "YES"
|
|
||||||
buildImplicitDependencies = "YES">
|
|
||||||
<BuildActionEntries>
|
|
||||||
<BuildActionEntry
|
|
||||||
buildForTesting = "YES"
|
|
||||||
buildForRunning = "YES"
|
|
||||||
buildForProfiling = "YES"
|
|
||||||
buildForArchiving = "YES"
|
|
||||||
buildForAnalyzing = "YES">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
||||||
BuildableName = "Runner.app"
|
|
||||||
BlueprintName = "Runner"
|
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildActionEntry>
|
|
||||||
</BuildActionEntries>
|
|
||||||
</BuildAction>
|
|
||||||
<TestAction
|
|
||||||
buildConfiguration = "Debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
||||||
<Testables>
|
|
||||||
</Testables>
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
||||||
BuildableName = "Runner.app"
|
|
||||||
BlueprintName = "Runner"
|
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
|
||||||
<LaunchAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
launchStyle = "0"
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
|
||||||
debugDocumentVersioning = "YES"
|
|
||||||
debugServiceExtension = "internal"
|
|
||||||
allowLocationSimulation = "YES">
|
|
||||||
<BuildableProductRunnable
|
|
||||||
runnableDebuggingMode = "0">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
||||||
BuildableName = "Runner.app"
|
|
||||||
BlueprintName = "Runner"
|
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildableProductRunnable>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
|
||||||
<ProfileAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
||||||
savedToolIdentifier = ""
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
debugDocumentVersioning = "YES">
|
|
||||||
<BuildableProductRunnable
|
|
||||||
runnableDebuggingMode = "0">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
||||||
BuildableName = "Runner.app"
|
|
||||||
BlueprintName = "Runner"
|
|
||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildableProductRunnable>
|
|
||||||
</ProfileAction>
|
|
||||||
<AnalyzeAction
|
|
||||||
buildConfiguration = "Debug">
|
|
||||||
</AnalyzeAction>
|
|
||||||
<ArchiveAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
revealArchiveInOrganizer = "YES">
|
|
||||||
</ArchiveAction>
|
|
||||||
</Scheme>
|
|
10
ios/Runner.xcworkspace/contents.xcworkspacedata
generated
@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "group:Runner.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
<FileRef
|
|
||||||
location = "group:Pods/Pods.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>BuildSystemType</key>
|
|
||||||
<string>Original</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,6 +0,0 @@
|
|||||||
#import <Flutter/Flutter.h>
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
@interface AppDelegate : FlutterAppDelegate
|
|
||||||
|
|
||||||
@end
|
|
@ -1,19 +0,0 @@
|
|||||||
#include "AppDelegate.h"
|
|
||||||
#include "GeneratedPluginRegistrant.h"
|
|
||||||
|
|
||||||
@import Firebase;//增加 firebase 支持
|
|
||||||
|
|
||||||
@implementation AppDelegate
|
|
||||||
|
|
||||||
- (BOOL)application:(UIApplication *)application
|
|
||||||
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
|
||||||
|
|
||||||
[FIRApp configure];//增加 firebase 支持
|
|
||||||
|
|
||||||
[GeneratedPluginRegistrant registerWithRegistry:self];
|
|
||||||
// Override point for customization after application launch.
|
|
||||||
[NSThread sleepForTimeInterval:2];
|
|
||||||
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
@ -1,13 +0,0 @@
|
|||||||
import UIKit
|
|
||||||
import Flutter
|
|
||||||
|
|
||||||
@UIApplicationMain
|
|
||||||
@objc class AppDelegate: FlutterAppDelegate {
|
|
||||||
override func application(
|
|
||||||
_ application: UIApplication,
|
|
||||||
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
|
|
||||||
) -> Bool {
|
|
||||||
GeneratedPluginRegistrant.register(with: self)
|
|
||||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 725 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |