Updated Dart packages.
Change-Id: I39b68d4401ca146d2fc2bad443dfd599302b8d77
diff --git a/pub/_discoveryapis_commons/BUILD.gn b/pub/_discoveryapis_commons/BUILD.gn
index 1439d62..984cbc5 100644
--- a/pub/_discoveryapis_commons/BUILD.gn
+++ b/pub/_discoveryapis_commons/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for _discoveryapis_commons-0.1.3+1
+# This file is generated by importer.py for _discoveryapis_commons-0.1.4
import("//build/dart/dart_package.gni")
diff --git a/pub/_discoveryapis_commons/CHANGELOG.md b/pub/_discoveryapis_commons/CHANGELOG.md
index ce57988..6c830a2 100644
--- a/pub/_discoveryapis_commons/CHANGELOG.md
+++ b/pub/_discoveryapis_commons/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.4
+
+- Make package strong-mode clean.
+
## 0.1.3+1
- Removed `pkg/crypto` dependency and upgrade Dart dependency to >=1.13.
diff --git a/pub/_discoveryapis_commons/analysis_options.yaml b/pub/_discoveryapis_commons/analysis_options.yaml
new file mode 100644
index 0000000..ee64972
--- /dev/null
+++ b/pub/_discoveryapis_commons/analysis_options.yaml
@@ -0,0 +1,3 @@
+# https://www.dartlang.org/guides/language/analysis-options
+analyzer:
+ strong-mode: true
diff --git a/pub/_discoveryapis_commons/lib/src/clients.dart b/pub/_discoveryapis_commons/lib/src/clients.dart
index df4a11e..5e33874 100644
--- a/pub/_discoveryapis_commons/lib/src/clients.dart
+++ b/pub/_discoveryapis_commons/lib/src/clients.dart
@@ -170,6 +170,7 @@
}
containsQueryParameter = true;
}
+
queryParams.forEach((String key, List<String> values) {
for (var value in values) {
addQueryParameter(key, value);
@@ -638,7 +639,7 @@
}
Stream<List<int>> _listOfBytes2Stream(List<List<int>> listOfBytes) {
- var controller = new StreamController();
+ var controller = new StreamController<List<int>>();
for (var array in listOfBytes) {
controller.add(array);
}
@@ -865,10 +866,10 @@
if (stringStream != null) {
return stringStream.transform(JSON.decoder).first.then((json) {
if (json is Map && json['error'] is Map) {
- Map error = json['error'];
- var code = error['code'];
- var message = error['message'];
- var errors = [];
+ final Map error = json['error'];
+ final code = error['code'];
+ final message = error['message'];
+ var errors = <client_requests.ApiRequestErrorDetail>[];
if (error.containsKey('errors') && error['errors'] is List) {
errors = error['errors']
.map((Map json) =>
@@ -905,16 +906,12 @@
/// Creates a new [Map] and inserts all entries of [source] into it,
/// optionally calling [convert] on the values.
-Map mapMap(Map source, [Object convert(Object source) = null]) {
+Map<String, T> mapMap<F, T>(Map<String, F> source, T convert(F source)) {
assert(source != null);
- var result = new collection.LinkedHashMap();
- source.forEach((String key, value) {
- assert(key != null);
- if (convert == null) {
- result[key] = value;
- } else {
- result[key] = convert(value);
- }
+ assert(convert != null);
+ final Map<String, T> result = new collection.LinkedHashMap<String, T>();
+ source.forEach((String key, F value) {
+ result[key] = convert(value);
});
return result;
}
diff --git a/pub/_discoveryapis_commons/pubspec.yaml b/pub/_discoveryapis_commons/pubspec.yaml
index 552baff..3669126 100644
--- a/pub/_discoveryapis_commons/pubspec.yaml
+++ b/pub/_discoveryapis_commons/pubspec.yaml
@@ -1,10 +1,10 @@
name: _discoveryapis_commons
-version: 0.1.3+1
+version: 0.1.4
author: Dart Team <misc@dartlang.org>
description: Library for use by client APIs generated from Discovery Documents.
homepage: https://github.com/dart-lang/discoveryapis_commons
environment:
- sdk: '>=1.13.0 <2.0.0'
+ sdk: '>=1.21.0 <2.0.0'
dependencies:
http: '>=0.11.1 <0.12.0'
dev_dependencies:
diff --git a/pub/archive/BUILD.gn b/pub/archive/BUILD.gn
index 2da32bf..e3bf1d1 100644
--- a/pub/archive/BUILD.gn
+++ b/pub/archive/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for archive-1.0.28
+# This file is generated by importer.py for archive-1.0.29
import("//build/dart/dart_package.gni")
@@ -10,6 +10,7 @@
disable_analysis = true
deps = [
+ "//third_party/dart-pkg/pub/args",
"//third_party/dart-pkg/pub/crypto",
]
}
diff --git a/pub/archive/ChangeLog.txt b/pub/archive/ChangeLog.txt
index 6ff3b7d..66c8b0a 100755
--- a/pub/archive/ChangeLog.txt
+++ b/pub/archive/ChangeLog.txt
@@ -1,4 +1,6 @@
-v UNRELEASED
+v 1.0.29 - May 25, 2017
+
+- Fix issue with POSIX tar files.
- Upgrade dependency on archive to `>=1.0.0 <2.0.0`
diff --git a/pub/archive/LICENSE b/pub/archive/LICENSE
index 17a941d..91e933b 100755
--- a/pub/archive/LICENSE
+++ b/pub/archive/LICENSE
@@ -1,89 +1,89 @@
- Copyright 2013 Brendan Duncan
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
-Some code has been derived from the following projects:
-
-zlib/inflate:
- JavaScript Zlib Library, https://github.com/imaya/zlib.js
- The MIT License
- Copyright (c) 2012 imaya
-
-zlib/deflate:
- Java JZLib Library, http://www.jcraft.com/jzlib/
- Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. 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.
-
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT,
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.
-
-bzip2:
- This program, "bzip2", the associated library "libbzip2", and all
- documentation, are copyright (C) 1996-2010 Julian R Seward. All
- rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
- 3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
- 4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-
- Julian Seward, jseward@bzip.org
- bzip2/libbzip2 version 1.0.6 of 6 September 2010
-
+ Copyright 2013 Brendan Duncan
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+Some code has been derived from the following projects:
+
+zlib/inflate:
+ JavaScript Zlib Library, https://github.com/imaya/zlib.js
+ The MIT License
+ Copyright (c) 2012 imaya
+
+zlib/deflate:
+ Java JZLib Library, http://www.jcraft.com/jzlib/
+ Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ 3. The names of the authors may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT,
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.
+
+bzip2:
+ This program, "bzip2", the associated library "libbzip2", and all
+ documentation, are copyright (C) 1996-2010 Julian R Seward. All
+ rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+
+ Julian Seward, jseward@bzip.org
+ bzip2/libbzip2 version 1.0.6 of 6 September 2010
+
diff --git a/pub/archive/README.md b/pub/archive/README.md
index 4f10c0b..c5fdc32 100755
--- a/pub/archive/README.md
+++ b/pub/archive/README.md
@@ -30,11 +30,11 @@
compressed Tar file:
```dart
-import 'dart:io' as Io;
+import 'dart:io';
import 'package:archive/archive.dart';
void main() {
// Read the Zip file from disk.
- List<int> bytes = new Io.File('test.zip').readAsBytesSync();
+ List<int> bytes = new File('test.zip').readAsBytesSync();
// Decode the Zip file
Archive archive = new ZipDecoder().decodeBytes(bytes);
@@ -43,7 +43,7 @@
for (ArchiveFile file in archive) {
String filename = file.name;
List<int> data = file.content;
- new Io.File('out/' + filename)
+ new File('out/' + filename)
..createSync(recursive: true)
..writeAsBytesSync(data);
}
@@ -53,7 +53,7 @@
List<int> tar_bz2 = new BZip2Encoder().encode(tar_data);
// Write the compressed tar file to disk.
- Io.File fp = new Io.File(filename + '.tbz');
+ File fp = new File(filename + '.tbz');
fp.writeAsBytesSync(tar_bz2);
}
```
diff --git a/pub/archive/bin/tar.dart b/pub/archive/bin/tar.dart
index 707fd55..2068d35 100755
--- a/pub/archive/bin/tar.dart
+++ b/pub/archive/bin/tar.dart
@@ -85,6 +85,9 @@
print('extracting to ${outDir.path}${io.Platform.pathSeparator}...');
for (TarFile file in tarArchive.files) {
+ if (!file.isFile) {
+ continue;
+ }
io.File f = new io.File(
'${outputPath}${io.Platform.pathSeparator}${file.filename}');
f.parent.createSync(recursive: true);
diff --git a/pub/archive/lib/src/archive.dart b/pub/archive/lib/src/archive.dart
index b28a13f..2e19d83 100755
--- a/pub/archive/lib/src/archive.dart
+++ b/pub/archive/lib/src/archive.dart
@@ -1,81 +1,81 @@
-part of archive;
-
-/**
- * A collection of files.
- */
-class Archive extends IterableBase<ArchiveFile> {
- /// The list of files in the archive.
- List<ArchiveFile> files = [];
- /// A global comment for the archive.
- String comment;
-
- /**
- * Add a file to the archive.
- */
- void addFile(ArchiveFile file) {
- files.add(file);
- }
-
- /**
- * The number of files in the archive.
- */
- int get length => files.length;
-
- /**
- * Get a file from the archive.
- */
- ArchiveFile operator[](int index) => files[index];
-
- /**
- * Find a file with the given [name] in the archive. If the file isn't found,
- * null will be returned.
- */
- ArchiveFile findFile(String name) {
- for (ArchiveFile f in files) {
- if (f.name == name) {
- return f;
- }
- }
- return null;
- }
-
- /**
- * The number of files in the archive.
- */
- int numberOfFiles() {
- return files.length;
- }
-
- /**
- * The name of the file at the given [index].
- */
- String fileName(int index) {
- return files[index].name;
- }
-
- /**
- * The decompressed size of the file at the given [index].
- */
- int fileSize(int index) {
- return files[index].size;
- }
-
- /**
- * The decompressed data of the file at the given [index].
- */
- List<int> fileData(int index) {
- return files[index].content;
- }
-
-
- ArchiveFile get first => files.first;
-
- ArchiveFile get last => files.last;
-
- bool get isEmpty => files.isEmpty;
-
- // Returns true if there is at least one element in this collection.
- bool get isNotEmpty => files.isNotEmpty;
-
- Iterator<ArchiveFile> get iterator => files.iterator;
-}
+part of archive;
+
+/**
+ * A collection of files.
+ */
+class Archive extends IterableBase<ArchiveFile> {
+ /// The list of files in the archive.
+ List<ArchiveFile> files = [];
+ /// A global comment for the archive.
+ String comment;
+
+ /**
+ * Add a file to the archive.
+ */
+ void addFile(ArchiveFile file) {
+ files.add(file);
+ }
+
+ /**
+ * The number of files in the archive.
+ */
+ int get length => files.length;
+
+ /**
+ * Get a file from the archive.
+ */
+ ArchiveFile operator[](int index) => files[index];
+
+ /**
+ * Find a file with the given [name] in the archive. If the file isn't found,
+ * null will be returned.
+ */
+ ArchiveFile findFile(String name) {
+ for (ArchiveFile f in files) {
+ if (f.name == name) {
+ return f;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * The number of files in the archive.
+ */
+ int numberOfFiles() {
+ return files.length;
+ }
+
+ /**
+ * The name of the file at the given [index].
+ */
+ String fileName(int index) {
+ return files[index].name;
+ }
+
+ /**
+ * The decompressed size of the file at the given [index].
+ */
+ int fileSize(int index) {
+ return files[index].size;
+ }
+
+ /**
+ * The decompressed data of the file at the given [index].
+ */
+ List<int> fileData(int index) {
+ return files[index].content;
+ }
+
+
+ ArchiveFile get first => files.first;
+
+ ArchiveFile get last => files.last;
+
+ bool get isEmpty => files.isEmpty;
+
+ // Returns true if there is at least one element in this collection.
+ bool get isNotEmpty => files.isNotEmpty;
+
+ Iterator<ArchiveFile> get iterator => files.iterator;
+}
diff --git a/pub/archive/lib/src/bzip2/bz2_bit_reader.dart b/pub/archive/lib/src/bzip2/bz2_bit_reader.dart
index 11a0360..6affa3d 100755
--- a/pub/archive/lib/src/bzip2/bz2_bit_reader.dart
+++ b/pub/archive/lib/src/bzip2/bz2_bit_reader.dart
@@ -1,51 +1,51 @@
-part of archive;
-
-class Bz2BitReader {
- InputStream input;
-
- Bz2BitReader(this.input);
-
- int readByte() => readBits(8);
-
- /**
- * Read a number of bits from the input stream.
- */
- int readBits(int numBits) {
- if (numBits == 0) {
- return 0;
- }
-
- if (_bitPos == 0) {
- _bitPos = 8;
- _bitBuffer = input.readByte();
- }
-
- int value = 0;
-
- while (numBits > _bitPos) {
- value = (value << _bitPos) + (_bitBuffer & _BIT_MASK[_bitPos]);
- numBits -= _bitPos;
- _bitPos = 8;
- _bitBuffer = input.readByte();
- }
-
- if (numBits > 0) {
- if (_bitPos == 0) {
- _bitPos = 8;
- _bitBuffer = input.readByte();
- }
-
- value = (value << numBits) +
- (_bitBuffer >> (_bitPos - numBits) & _BIT_MASK[numBits]);
-
- _bitPos -= numBits;
- }
-
- return value;
- }
-
- int _bitBuffer = 0;
- int _bitPos = 0;
-
- static const List<int> _BIT_MASK = const [0, 1, 3, 7, 15, 31, 63, 127, 255];
-}
+part of archive;
+
+class Bz2BitReader {
+ InputStream input;
+
+ Bz2BitReader(this.input);
+
+ int readByte() => readBits(8);
+
+ /**
+ * Read a number of bits from the input stream.
+ */
+ int readBits(int numBits) {
+ if (numBits == 0) {
+ return 0;
+ }
+
+ if (_bitPos == 0) {
+ _bitPos = 8;
+ _bitBuffer = input.readByte();
+ }
+
+ int value = 0;
+
+ while (numBits > _bitPos) {
+ value = (value << _bitPos) + (_bitBuffer & _BIT_MASK[_bitPos]);
+ numBits -= _bitPos;
+ _bitPos = 8;
+ _bitBuffer = input.readByte();
+ }
+
+ if (numBits > 0) {
+ if (_bitPos == 0) {
+ _bitPos = 8;
+ _bitBuffer = input.readByte();
+ }
+
+ value = (value << numBits) +
+ (_bitBuffer >> (_bitPos - numBits) & _BIT_MASK[numBits]);
+
+ _bitPos -= numBits;
+ }
+
+ return value;
+ }
+
+ int _bitBuffer = 0;
+ int _bitPos = 0;
+
+ static const List<int> _BIT_MASK = const [0, 1, 3, 7, 15, 31, 63, 127, 255];
+}
diff --git a/pub/archive/lib/src/bzip2/bz2_bit_writer.dart b/pub/archive/lib/src/bzip2/bz2_bit_writer.dart
index 8fb6648..e9f2935 100755
--- a/pub/archive/lib/src/bzip2/bz2_bit_writer.dart
+++ b/pub/archive/lib/src/bzip2/bz2_bit_writer.dart
@@ -1,81 +1,81 @@
-part of archive;
-
-class Bz2BitWriter {
- OutputStream output;
-
- Bz2BitWriter(this.output);
-
- void writeByte(int byte) => writeBits(8, byte);
-
- void writeBytes(List<int> bytes) {
- for (int i = 0; i < bytes.length; ++i) {
- writeBits(8, bytes[i]);
- }
- }
-
- void writeUint16(int value) {
- writeBits(16, value);
- }
-
- void writeUint24(int value) {
- writeBits(24, value);
- }
-
- void writeUint32(int value) {
- writeBits(32, value);
- }
-
- void writeBits(int numBits, int value) {
- // TODO optimize
- if (_bitPos == 8 && numBits == 8) {
- output.writeByte(value & 0xff);
- return;
- }
-
- if (_bitPos == 8 && numBits == 16) {
- output.writeByte((value >> 8) & 0xff);
- output.writeByte(value & 0xff);
- return;
- }
-
- if (_bitPos == 8 && numBits == 24) {
- output.writeByte((value >> 16) & 0xff);
- output.writeByte((value >> 8) & 0xff);
- output.writeByte(value & 0xff);
- return;
- }
-
- if (_bitPos == 8 && numBits == 32) {
- output.writeByte((value >> 24) & 0xff);
- output.writeByte((value >> 16) & 0xff);
- output.writeByte((value >> 8) & 0xff);
- output.writeByte(value & 0xff);
- return;
- }
-
- while (numBits > 0) {
- numBits--;
- int b = (value >> numBits) & 0x1;
- _bitBuffer = (_bitBuffer << 1) | b;
- _bitPos--;
- if (_bitPos == 0) {
- output.writeByte(_bitBuffer);
- _bitPos = 8;
- _bitBuffer = 0;
- }
- }
- }
-
- /**
- * Write any remaining bits from the buffer to the output, padding the
- * remainder of the byte with 0's.
- */
- void flush() {
- if (_bitPos != 8) {
- writeBits(_bitPos, 0);
- }
- }
-
- int _bitBuffer = 0;
- int _bitPos = 8;
-}
+part of archive;
+
+class Bz2BitWriter {
+ OutputStream output;
+
+ Bz2BitWriter(this.output);
+
+ void writeByte(int byte) => writeBits(8, byte);
+
+ void writeBytes(List<int> bytes) {
+ for (int i = 0; i < bytes.length; ++i) {
+ writeBits(8, bytes[i]);
+ }
+ }
+
+ void writeUint16(int value) {
+ writeBits(16, value);
+ }
+
+ void writeUint24(int value) {
+ writeBits(24, value);
+ }
+
+ void writeUint32(int value) {
+ writeBits(32, value);
+ }
+
+ void writeBits(int numBits, int value) {
+ // TODO optimize
+ if (_bitPos == 8 && numBits == 8) {
+ output.writeByte(value & 0xff);
+ return;
+ }
+
+ if (_bitPos == 8 && numBits == 16) {
+ output.writeByte((value >> 8) & 0xff);
+ output.writeByte(value & 0xff);
+ return;
+ }
+
+ if (_bitPos == 8 && numBits == 24) {
+ output.writeByte((value >> 16) & 0xff);
+ output.writeByte((value >> 8) & 0xff);
+ output.writeByte(value & 0xff);
+ return;
+ }
+
+ if (_bitPos == 8 && numBits == 32) {
+ output.writeByte((value >> 24) & 0xff);
+ output.writeByte((value >> 16) & 0xff);
+ output.writeByte((value >> 8) & 0xff);
+ output.writeByte(value & 0xff);
+ return;
+ }
+
+ while (numBits > 0) {
+ numBits--;
+ int b = (value >> numBits) & 0x1;
+ _bitBuffer = (_bitBuffer << 1) | b;
+ _bitPos--;
+ if (_bitPos == 0) {
+ output.writeByte(_bitBuffer);
+ _bitPos = 8;
+ _bitBuffer = 0;
+ }
+ }
+ }
+
+ /**
+ * Write any remaining bits from the buffer to the output, padding the
+ * remainder of the byte with 0's.
+ */
+ void flush() {
+ if (_bitPos != 8) {
+ writeBits(_bitPos, 0);
+ }
+ }
+
+ int _bitBuffer = 0;
+ int _bitPos = 8;
+}
diff --git a/pub/archive/lib/src/bzip2/bzip2.dart b/pub/archive/lib/src/bzip2/bzip2.dart
index cb97cb4..353dcc3 100755
--- a/pub/archive/lib/src/bzip2/bzip2.dart
+++ b/pub/archive/lib/src/bzip2/bzip2.dart
@@ -1,91 +1,91 @@
-part of archive;
-
-class BZip2 {
- static int INITIAL_CRC = 0xffffffff;
-
- static int updateCrc(int value, int crc) {
- return ((crc << 8) ^
- _BZ2_CRC32_TABLE[(crc >> 24) & 0xff ^ (value & 0xff)]) &
- 0xffffffff;
- }
-
- static int finalizeCrc(int crc) {
- return crc ^ 0xffffffff;
- }
-
- static const List<int> BZH_SIGNATURE = const [0x42, 0x5a, 0x68];
-
- static const int HDR_0 = 0x30;
-
- static const List<int> COMPRESSED_MAGIC = const [
- 0x31, 0x41, 0x59, 0x26, 0x53, 0x59];
-
- static const List<int> EOS_MAGIC = const [
- 0x17, 0x72, 0x45, 0x38, 0x50, 0x90];
-
- static const List<int> _BZ2_CRC32_TABLE = const [
- 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
- 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
- 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
- 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
- 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
- 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
- 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
- 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
- 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
- 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
- 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
- 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
- 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
- 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
- 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
- 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
- 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
- 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
- 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
- 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
- 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
- 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
- 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
- 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
- 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
- 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
- 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
- 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
- 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
- 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
- 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
- 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
- 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
- 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
- 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
- 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
- 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
- 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
- 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
- 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
- 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
- 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
- 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
- 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
- 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
- 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
- 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
- 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
- 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
- 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
- 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
- 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
- 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
- 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
- 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
- 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
- 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
- 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
- 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
- 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
- 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
- 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
- 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
- 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4];
-}
+part of archive;
+
+class BZip2 {
+ static int INITIAL_CRC = 0xffffffff;
+
+ static int updateCrc(int value, int crc) {
+ return ((crc << 8) ^
+ _BZ2_CRC32_TABLE[(crc >> 24) & 0xff ^ (value & 0xff)]) &
+ 0xffffffff;
+ }
+
+ static int finalizeCrc(int crc) {
+ return crc ^ 0xffffffff;
+ }
+
+ static const List<int> BZH_SIGNATURE = const [0x42, 0x5a, 0x68];
+
+ static const int HDR_0 = 0x30;
+
+ static const List<int> COMPRESSED_MAGIC = const [
+ 0x31, 0x41, 0x59, 0x26, 0x53, 0x59];
+
+ static const List<int> EOS_MAGIC = const [
+ 0x17, 0x72, 0x45, 0x38, 0x50, 0x90];
+
+ static const List<int> _BZ2_CRC32_TABLE = const [
+ 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
+ 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
+ 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
+ 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
+ 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
+ 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
+ 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
+ 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
+ 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
+ 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
+ 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
+ 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
+ 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
+ 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
+ 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
+ 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
+ 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
+ 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
+ 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
+ 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
+ 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
+ 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
+ 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
+ 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
+ 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
+ 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
+ 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
+ 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
+ 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
+ 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
+ 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
+ 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
+ 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
+ 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
+ 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
+ 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
+ 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
+ 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
+ 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
+ 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
+ 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
+ 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
+ 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
+ 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
+ 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
+ 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
+ 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
+ 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
+ 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
+ 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
+ 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
+ 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
+ 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
+ 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
+ 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
+ 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
+ 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
+ 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
+ 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
+ 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
+ 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
+ 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
+ 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
+ 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4];
+}
diff --git a/pub/archive/lib/src/tar/tar_file.dart b/pub/archive/lib/src/tar/tar_file.dart
index 254e090..ba10b51 100755
--- a/pub/archive/lib/src/tar/tar_file.dart
+++ b/pub/archive/lib/src/tar/tar_file.dart
@@ -27,7 +27,18 @@
static const String TYPE_NORMAL_FILE = '0';
static const String TYPE_HARD_LINK = '1';
static const String TYPE_SYMBOLIC_LINK = '2';
+ static const String TYPE_CHAR_SPEC = '3';
+ static const String TYPE_BLOCK_SPEC = '4';
static const String TYPE_DIRECTORY = '5';
+ static const String TYPE_FIFO = '6';
+ static const String TYPE_CONT_FILE = '7';
+ // global extended header with meta data (POSIX.1-2001)
+ static const String TYPE_G_EX_HEADER = 'g';
+ static const String TYPE_G_EX_HEADER2 = 'G';
+ // extended header with meta data for the next file in the archive
+ // (POSIX.1-2001)
+ static const String TYPE_EX_HEADER = 'x';
+ static const String TYPE_EX_HEADER2 = 'X';
// Pre-POSIX Format
String filename; // 100 bytes
@@ -174,7 +185,14 @@
if (s.isEmpty) {
return 0;
}
- int x = int.parse(s, radix: 8);
+ int x = 0;
+ try {
+ x = int.parse(s, radix: 8);
+ } catch(e) {
+ // Catch to fix a crash with bad group_id and owner_id values.
+ // This occurs for POSIX archives, where some attributes like uid and
+ // gid are stored in a separate PaxHeader file.
+ }
return x;
}
diff --git a/pub/archive/lib/src/tar_decoder.dart b/pub/archive/lib/src/tar_decoder.dart
index ef9ff6d..feb6515 100755
--- a/pub/archive/lib/src/tar_decoder.dart
+++ b/pub/archive/lib/src/tar_decoder.dart
@@ -14,6 +14,7 @@
Archive archive = new Archive();
files.clear();
+ //TarFile paxHeader = null;
while (!input.isEOS) {
// End of archive when two consecutive 0's are found.
if (input[0] == 0 && input[1] == 0) {
@@ -21,16 +22,30 @@
}
TarFile tf = new TarFile.read(input);
- files.add(tf);
+ // In POSIX formatted tar files, a separate 'PAX' file contains extended
+ // metadata for files. These are identified by having a type flag 'X'.
+ // TODO parse these metadata values.
+ if (tf.typeFlag == TarFile.TYPE_G_EX_HEADER ||
+ tf.typeFlag == TarFile.TYPE_G_EX_HEADER2) {
+ // TODO handle PAX global header.
+ }
+ if (tf.typeFlag == TarFile.TYPE_EX_HEADER ||
+ tf.typeFlag == TarFile.TYPE_EX_HEADER2) {
+ //paxHeader = tf;
+ } else {
+ files.add(tf);
- ArchiveFile file = new ArchiveFile(tf.filename, tf.fileSize, tf._rawContent);
- file.mode = tf.mode;
- file.ownerId = tf.ownerId;
- file.groupId = tf.groupId;
- file.lastModTime = tf.lastModTime;
- file.isFile = tf.isFile;
+ ArchiveFile file = new ArchiveFile(
+ tf.filename, tf.fileSize, tf._rawContent);
- archive.addFile(file);
+ file.mode = tf.mode;
+ file.ownerId = tf.ownerId;
+ file.groupId = tf.groupId;
+ file.lastModTime = tf.lastModTime;
+ file.isFile = tf.isFile;
+
+ archive.addFile(file);
+ }
}
return archive;
diff --git a/pub/archive/lib/src/util/archive_exception.dart b/pub/archive/lib/src/util/archive_exception.dart
index 72b5539..e5f4455 100755
--- a/pub/archive/lib/src/util/archive_exception.dart
+++ b/pub/archive/lib/src/util/archive_exception.dart
@@ -1,13 +1,13 @@
-part of archive;
-
-/**
- * An exception thrown when there was a problem in the archive library.
- */
-class ArchiveException implements Exception {
- /// A message describing the error.
- final String message;
-
- ArchiveException(this.message);
-
- String toString() => "ArchiveException: $message";
-}
+part of archive;
+
+/**
+ * An exception thrown when there was a problem in the archive library.
+ */
+class ArchiveException implements Exception {
+ /// A message describing the error.
+ final String message;
+
+ ArchiveException(this.message);
+
+ String toString() => "ArchiveException: $message";
+}
diff --git a/pub/archive/lib/src/util/byte_order.dart b/pub/archive/lib/src/util/byte_order.dart
index d2bd29f..abd0f0a 100755
--- a/pub/archive/lib/src/util/byte_order.dart
+++ b/pub/archive/lib/src/util/byte_order.dart
@@ -1,5 +1,5 @@
-part of archive;
-
-// enum ByteOrder
-const int LITTLE_ENDIAN = 0;
-const int BIG_ENDIAN = 1;
+part of archive;
+
+// enum ByteOrder
+const int LITTLE_ENDIAN = 0;
+const int BIG_ENDIAN = 1;
diff --git a/pub/archive/lib/src/zlib/huffman_table.dart b/pub/archive/lib/src/zlib/huffman_table.dart
index 85c6e16..cb38900 100755
--- a/pub/archive/lib/src/zlib/huffman_table.dart
+++ b/pub/archive/lib/src/zlib/huffman_table.dart
@@ -1,49 +1,49 @@
-part of archive;
-
-/**
- * Build huffman table from length list.
- */
-class HuffmanTable {
- Uint32List table;
- int maxCodeLength = 0;
- int minCodeLength = 0x7fffffff;
-
- HuffmanTable(List<int> lengths) {
- int listSize = lengths.length;
-
- for (int i = 0; i < listSize; ++i) {
- if (lengths[i] > maxCodeLength) {
- maxCodeLength = lengths[i];
- }
- if (lengths[i] < minCodeLength) {
- minCodeLength = lengths[i];
- }
- }
-
- int size = 1 << maxCodeLength;
- table = new Uint32List(size);
-
- for (int bitLength = 1, code = 0, skip = 2; bitLength <= maxCodeLength;) {
- for (int i = 0; i < listSize; ++i) {
- if (lengths[i] == bitLength) {
- int reversed = 0;
- int rtemp = code;
- for (int j = 0; j < bitLength; ++j) {
- reversed = (reversed << 1) | (rtemp & 1);
- rtemp >>= 1;
- }
-
- for (int j = reversed; j < size; j += skip) {
- table[j] = (bitLength << 16) | i;
- }
-
- ++code;
- }
- }
-
- ++bitLength;
- code <<= 1;
- skip <<= 1;
- }
- }
-}
+part of archive;
+
+/**
+ * Build huffman table from length list.
+ */
+class HuffmanTable {
+ Uint32List table;
+ int maxCodeLength = 0;
+ int minCodeLength = 0x7fffffff;
+
+ HuffmanTable(List<int> lengths) {
+ int listSize = lengths.length;
+
+ for (int i = 0; i < listSize; ++i) {
+ if (lengths[i] > maxCodeLength) {
+ maxCodeLength = lengths[i];
+ }
+ if (lengths[i] < minCodeLength) {
+ minCodeLength = lengths[i];
+ }
+ }
+
+ int size = 1 << maxCodeLength;
+ table = new Uint32List(size);
+
+ for (int bitLength = 1, code = 0, skip = 2; bitLength <= maxCodeLength;) {
+ for (int i = 0; i < listSize; ++i) {
+ if (lengths[i] == bitLength) {
+ int reversed = 0;
+ int rtemp = code;
+ for (int j = 0; j < bitLength; ++j) {
+ reversed = (reversed << 1) | (rtemp & 1);
+ rtemp >>= 1;
+ }
+
+ for (int j = reversed; j < size; j += skip) {
+ table[j] = (bitLength << 16) | i;
+ }
+
+ ++code;
+ }
+ }
+
+ ++bitLength;
+ code <<= 1;
+ skip <<= 1;
+ }
+ }
+}
diff --git a/pub/archive/pubspec.yaml b/pub/archive/pubspec.yaml
index 040247e..fd58481 100755
--- a/pub/archive/pubspec.yaml
+++ b/pub/archive/pubspec.yaml
@@ -1,5 +1,5 @@
name: archive
-version: 1.0.28
+version: 1.0.29
author: Brendan Duncan <brendanduncan@gmail.com>
description: Provides encoders and decoders for various archive and compression formats such as zip, tar, bzip2, gzip, and zlib.
homepage: https://github.com/brendan-duncan/archive
@@ -8,6 +8,7 @@
documentation: https://github.com/brendan-duncan/archive/wiki
dependencies:
crypto: '>=0.9.2 <3.0.0'
+ args: '>=0.13.7 <1.0.0'
dev_dependencies:
browser: '<1.0.0'
test: '>=0.12.13 <1.0.0'
diff --git a/pub/cli_util/BUILD.gn b/pub/cli_util/BUILD.gn
index 387bc35..3d26f70 100644
--- a/pub/cli_util/BUILD.gn
+++ b/pub/cli_util/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for cli_util-0.1.0
+# This file is generated by importer.py for cli_util-0.1.1
import("//build/dart/dart_package.gni")
diff --git a/pub/cli_util/CHANGELOG.md b/pub/cli_util/CHANGELOG.md
index eaeffde..c5d12d6 100644
--- a/pub/cli_util/CHANGELOG.md
+++ b/pub/cli_util/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+## 0.1.1
+
+- Updated to the output for indeterminate progress
+- Exposed a `Logger.isVerbose` getter
+
## 0.1.0
- Use the new `Platform.resolvedExecutable` API to locate the SDK
diff --git a/pub/cli_util/README.md b/pub/cli_util/README.md
index e27d663..0256472 100644
--- a/pub/cli_util/README.md
+++ b/pub/cli_util/README.md
@@ -7,6 +7,7 @@
interact with the Dart SDK (such as the [analyzer][analyzer]).
[![Build Status](https://travis-ci.org/dart-lang/cli_util.svg)](https://travis-ci.org/dart-lang/cli_util)
+[![Pub](https://img.shields.io/pub/v/cli_util.svg)](https://pub.dartlang.org/packages/cli_util)
## Locating the Dart SDK
diff --git a/pub/cli_util/lib/cli_logging.dart b/pub/cli_util/lib/cli_logging.dart
index 72ec89a..2da62ca 100644
--- a/pub/cli_util/lib/cli_logging.dart
+++ b/pub/cli_util/lib/cli_logging.dart
@@ -4,12 +4,11 @@
/// This library contains functionality to help command-line utilities to easily
/// create aesthetic output.
+library cli_logging;
import 'dart:async';
import 'dart:io' as io;
-/// create aesthetic output.
-
/// A small utility class to make it easier to work with common ANSI escape
/// sequences.
class Ansi {
@@ -63,6 +62,8 @@
Ansi get ansi;
+ bool get isVerbose;
+
/// Print an error message.
void stderr(String message);
@@ -103,6 +104,8 @@
ansi ??= new Ansi(Ansi.terminalSupportsAnsi);
}
+ bool get isVerbose => false;
+
Progress _currentProgress;
void stderr(String message) {
@@ -202,15 +205,17 @@
bool showTiming: false}) {
String char = kAnimationItems[_index % kAnimationItems.length];
if (isFinal || cancelled) {
- char = ' ';
+ char = '';
}
io.stdout.write('${ansi.backspace}${char}');
if (isFinal || cancelled) {
if (message != null) {
- io.stdout.write(message);
+ io.stdout.write(message.isEmpty ? ' ' : message);
} else if (showTiming) {
String time = (elapsed.inMilliseconds / 1000.0).toStringAsFixed(1);
io.stdout.write('${time}s');
+ } else {
+ io.stdout.write(' ');
}
io.stdout.writeln();
}
@@ -229,6 +234,8 @@
_timer = new Stopwatch()..start();
}
+ bool get isVerbose => true;
+
void stderr(String message) {
flush();
_previousErr = '${ansi.red}$message${ansi.none}';
diff --git a/pub/cli_util/lib/cli_util.dart b/pub/cli_util/lib/cli_util.dart
index 2c8faa2..5d32e78 100644
--- a/pub/cli_util/lib/cli_util.dart
+++ b/pub/cli_util/lib/cli_util.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
/// Utilities to return the Dart SDK location.
+library cli_util;
import 'dart:io';
diff --git a/pub/cli_util/pubspec.yaml b/pub/cli_util/pubspec.yaml
index ccd17b5..baead10 100644
--- a/pub/cli_util/pubspec.yaml
+++ b/pub/cli_util/pubspec.yaml
@@ -1,5 +1,5 @@
name: cli_util
-version: 0.1.0
+version: 0.1.1
author: Dart Team <misc@dartlang.org>
description: A library to help in building Dart command-line apps.
homepage: https://github.com/dart-lang/cli_util
diff --git a/pub/csslib/BUILD.gn b/pub/csslib/BUILD.gn
index f75672a..699b4cd 100644
--- a/pub/csslib/BUILD.gn
+++ b/pub/csslib/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for csslib-0.13.7+1
+# This file is generated by importer.py for csslib-0.14.0
import("//build/dart/dart_package.gni")
diff --git a/pub/csslib/CHANGELOG.md b/pub/csslib/CHANGELOG.md
index e23bdf8..8662956 100644
--- a/pub/csslib/CHANGELOG.md
+++ b/pub/csslib/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 0.14.0
+
+### New features
+
+* Supports nested at-rules.
+* Supports nested HTML comments in CSS comments and vice-versa.
+
+### Breaking changes
+
+* The `List<RuleSet> rulesets` field on `MediaDirective`, `HostDirective`, and
+ `StyletDirective` has been replaced by `List<TreeNode> rules` to allow nested
+ at-rules in addition to rulesets.
+
## 0.13.6
* Adds support for `@viewport`.
diff --git a/pub/csslib/lib/parser.dart b/pub/csslib/lib/parser.dart
index cd4f6c0..6688507 100644
--- a/pub/csslib/lib/parser.dart
+++ b/pub/csslib/lib/parser.dart
@@ -211,17 +211,11 @@
var start = _peekToken.span;
while (!_maybeEat(TokenKind.END_OF_FILE) && !_peekKind(TokenKind.RBRACE)) {
// TODO(terry): Need to handle charset.
- var directive = processDirective();
- if (directive != null) {
- productions.add(directive);
- _maybeEat(TokenKind.SEMICOLON);
+ final rule = processRule();
+ if (rule != null) {
+ productions.add(rule);
} else {
- RuleSet ruleset = processRuleSet();
- if (ruleset != null) {
- productions.add(ruleset);
- } else {
- break;
- }
+ break;
}
}
@@ -523,12 +517,12 @@
// Any medias?
var media = processMediaQueryList();
- List<TreeNode> rulesets = [];
+ List<TreeNode> rules = [];
if (_maybeEat(TokenKind.LBRACE)) {
while (!_maybeEat(TokenKind.END_OF_FILE)) {
- RuleSet ruleset = processRuleSet();
- if (ruleset == null) break;
- rulesets.add(ruleset);
+ final rule = processRule();
+ if (rule == null) break;
+ rules.add(rule);
}
if (!_maybeEat(TokenKind.RBRACE)) {
@@ -537,17 +531,17 @@
} else {
_error('expected { after media before ruleset', _peekToken.span);
}
- return new MediaDirective(media, rulesets, _makeSpan(start));
+ return new MediaDirective(media, rules, _makeSpan(start));
case TokenKind.DIRECTIVE_HOST:
_next();
- List<TreeNode> rulesets = [];
+ List<TreeNode> rules = [];
if (_maybeEat(TokenKind.LBRACE)) {
while (!_maybeEat(TokenKind.END_OF_FILE)) {
- RuleSet ruleset = processRuleSet();
- if (ruleset == null) break;
- rulesets.add(ruleset);
+ final rule = processRule();
+ if (rule == null) break;
+ rules.add(rule);
}
if (!_maybeEat(TokenKind.RBRACE)) {
@@ -556,7 +550,7 @@
} else {
_error('expected { after host before ruleset', _peekToken.span);
}
- return new HostDirective(rulesets, _makeSpan(start));
+ return new HostDirective(rules, _makeSpan(start));
case TokenKind.DIRECTIVE_PAGE:
/*
@@ -708,11 +702,11 @@
start = _peekToken.span;
while (!_maybeEat(TokenKind.END_OF_FILE)) {
- RuleSet ruleset = processRuleSet();
- if (ruleset == null) {
+ final rule = processRule();
+ if (rule == null) {
break;
}
- productions.add(ruleset);
+ productions.add(rule);
}
_eat(TokenKind.RBRACE);
@@ -1121,8 +1115,13 @@
return new ViewportDirective(name, declarations, _makeSpan(start));
}
- RuleSet processRuleSet([SelectorGroup selectorGroup]) {
+ TreeNode processRule([SelectorGroup selectorGroup]) {
if (selectorGroup == null) {
+ final directive = processDirective();
+ if (directive != null) {
+ _maybeEat(TokenKind.SEMICOLON);
+ return directive;
+ }
selectorGroup = processSelectorGroup();
}
if (selectorGroup != null) {
@@ -1135,14 +1134,9 @@
List<TreeNode> processGroupRuleBody() {
var nodes = <TreeNode>[];
while (!(_peekKind(TokenKind.RBRACE) || _peekKind(TokenKind.END_OF_FILE))) {
- var directive = processDirective();
- if (directive != null) {
- nodes.add(directive);
- continue;
- }
- var ruleSet = processRuleSet();
- if (ruleSet != null) {
- nodes.add(ruleSet);
+ var rule = processRule();
+ if (rule != null) {
+ nodes.add(rule);
continue;
}
break;
@@ -1211,7 +1205,7 @@
var selectorGroup = _nestedSelector();
while (selectorGroup != null) {
// Nested selector so process as a ruleset.
- var ruleset = processRuleSet(selectorGroup);
+ var ruleset = processRule(selectorGroup);
decls.add(ruleset);
selectorGroup = _nestedSelector();
}
diff --git a/pub/csslib/lib/src/analyzer.dart b/pub/csslib/lib/src/analyzer.dart
index 7c7372c..6c6ba6d 100644
--- a/pub/csslib/lib/src/analyzer.dart
+++ b/pub/csslib/lib/src/analyzer.dart
@@ -415,9 +415,9 @@
_MediaRulesReplacer(this._ruleSet, this._newRules);
visitMediaDirective(MediaDirective node) {
- var index = node.rulesets.indexOf(_ruleSet);
+ var index = node.rules.indexOf(_ruleSet);
if (index != -1) {
- node.rulesets.insertAll(index + 1, _newRules);
+ node.rules.insertAll(index + 1, _newRules);
_foundAndReplaced = true;
}
}
diff --git a/pub/csslib/lib/src/css_printer.dart b/pub/csslib/lib/src/css_printer.dart
index ac26acb..91c2861 100644
--- a/pub/csslib/lib/src/css_printer.dart
+++ b/pub/csslib/lib/src/css_printer.dart
@@ -141,7 +141,7 @@
emit('$_newLine@media');
emitMediaQueries(node.mediaQueries);
emit('$_sp{');
- for (var ruleset in node.rulesets) {
+ for (var ruleset in node.rules) {
ruleset.visit(this);
}
emit('$_newLine}');
@@ -149,7 +149,7 @@
void visitHostDirective(HostDirective node) {
emit('$_newLine@host$_sp{');
- for (var ruleset in node.rulesets) {
+ for (var ruleset in node.rules) {
ruleset.visit(this);
}
emit('$_newLine}');
diff --git a/pub/csslib/lib/src/tokenizer.dart b/pub/csslib/lib/src/tokenizer.dart
index d7677f9..0b0661a 100644
--- a/pub/csslib/lib/src/tokenizer.dart
+++ b/pub/csslib/lib/src/tokenizer.dart
@@ -149,7 +149,7 @@
if (_maybeEatChar(TokenChar.BANG)) {
if (_maybeEatChar(TokenChar.MINUS) &&
_maybeEatChar(TokenChar.MINUS)) {
- return finishMultiLineComment();
+ return finishHtmlComment();
} else if (_maybeEatChar(TokenChar.LBRACK) &&
_maybeEatChar(CDATA_NAME[0]) &&
_maybeEatChar(CDATA_NAME[1]) &&
@@ -393,6 +393,26 @@
return _finishToken(TokenKind.HEX_RANGE);
}
+ Token finishHtmlComment() {
+ while (true) {
+ int ch = _nextChar();
+ if (ch == 0) {
+ return _finishToken(TokenKind.INCOMPLETE_COMMENT);
+ } else if (ch == TokenChar.MINUS) {
+ /* Check if close part of Comment Definition --> (CDC). */
+ if (_maybeEatChar(TokenChar.MINUS)) {
+ if (_maybeEatChar(TokenChar.GREATER)) {
+ if (_inString) {
+ return next();
+ } else {
+ return _finishToken(TokenKind.HTML_COMMENT);
+ }
+ }
+ }
+ }
+ }
+ }
+
Token finishMultiLineComment() {
while (true) {
int ch = _nextChar();
@@ -406,17 +426,6 @@
return _finishToken(TokenKind.COMMENT);
}
}
- } else if (ch == TokenChar.MINUS) {
- /* Check if close part of Comment Definition --> (CDC). */
- if (_maybeEatChar(TokenChar.MINUS)) {
- if (_maybeEatChar(TokenChar.GREATER)) {
- if (_inString) {
- return next();
- } else {
- return _finishToken(TokenKind.HTML_COMMENT);
- }
- }
- }
}
}
}
diff --git a/pub/csslib/lib/src/tree.dart b/pub/csslib/lib/src/tree.dart
index 509e708..7e68473 100644
--- a/pub/csslib/lib/src/tree.dart
+++ b/pub/csslib/lib/src/tree.dart
@@ -638,9 +638,9 @@
class MediaDirective extends Directive {
final List<MediaQuery> mediaQueries;
- final List<RuleSet> rulesets;
+ final List<TreeNode> rules;
- MediaDirective(this.mediaQueries, this.rulesets, SourceSpan span)
+ MediaDirective(this.mediaQueries, this.rules, SourceSpan span)
: super(span);
MediaDirective clone() {
@@ -648,27 +648,27 @@
for (var mediaQuery in mediaQueries) {
cloneQueries.add(mediaQuery.clone());
}
- var cloneRulesets = <RuleSet>[];
- for (var ruleset in rulesets) {
- cloneRulesets.add(ruleset.clone());
+ var cloneRules = <TreeNode>[];
+ for (var rule in rules) {
+ cloneRules.add(rule.clone());
}
- return new MediaDirective(cloneQueries, cloneRulesets, span);
+ return new MediaDirective(cloneQueries, cloneRules, span);
}
visit(VisitorBase visitor) => visitor.visitMediaDirective(this);
}
class HostDirective extends Directive {
- final List<RuleSet> rulesets;
+ final List<TreeNode> rules;
- HostDirective(this.rulesets, SourceSpan span) : super(span);
+ HostDirective(this.rules, SourceSpan span) : super(span);
HostDirective clone() {
- var cloneRulesets = <RuleSet>[];
- for (var ruleset in rulesets) {
- cloneRulesets.add(ruleset.clone());
+ var cloneRules = <TreeNode>[];
+ for (var rule in rules) {
+ cloneRules.add(rule.clone());
}
- return new HostDirective(cloneRulesets, span);
+ return new HostDirective(cloneRules, span);
}
visit(VisitorBase visitor) => visitor.visitHostDirective(this);
@@ -771,20 +771,20 @@
class StyletDirective extends Directive {
final String dartClassName;
- final List<RuleSet> rulesets;
+ final List<TreeNode> rules;
- StyletDirective(this.dartClassName, this.rulesets, SourceSpan span)
+ StyletDirective(this.dartClassName, this.rules, SourceSpan span)
: super(span);
bool get isBuiltIn => false;
bool get isExtension => true;
StyletDirective clone() {
- var cloneRulesets = <RuleSet>[];
- for (var ruleset in rulesets) {
- cloneRulesets.add(ruleset.clone());
+ var cloneRules = <TreeNode>[];
+ for (var rule in rules) {
+ cloneRules.add(rule.clone());
}
- return new StyletDirective(dartClassName, cloneRulesets, span);
+ return new StyletDirective(dartClassName, cloneRules, span);
}
visit(VisitorBase visitor) => visitor.visitStyletDirective(this);
diff --git a/pub/csslib/lib/src/tree_printer.dart b/pub/csslib/lib/src/tree_printer.dart
index ba35dec..4f196c0 100644
--- a/pub/csslib/lib/src/tree_printer.dart
+++ b/pub/csslib/lib/src/tree_printer.dart
@@ -85,7 +85,7 @@
heading('MediaDirective', node);
output.depth++;
output.writeNodeList('media queries', node.mediaQueries);
- output.writeNodeList('rule sets', node.rulesets);
+ output.writeNodeList('rule sets', node.rules);
super.visitMediaDirective(node);
output.depth--;
}
@@ -191,7 +191,7 @@
heading('StyletDirective', node);
output.writeValue('dartClassName', node.dartClassName);
output.depth++;
- output.writeNodeList('rulesets', node.rulesets);
+ output.writeNodeList('rulesets', node.rules);
output.depth--;
}
diff --git a/pub/csslib/lib/visitor.dart b/pub/csslib/lib/visitor.dart
index eff9e7b..6e3af18 100644
--- a/pub/csslib/lib/visitor.dart
+++ b/pub/csslib/lib/visitor.dart
@@ -190,18 +190,12 @@
}
visitMediaDirective(MediaDirective node) {
- for (var mediaQuery in node.mediaQueries) {
- visitMediaQuery(mediaQuery);
- }
- for (var ruleset in node.rulesets) {
- visitRuleSet(ruleset);
- }
+ _visitNodeList(node.mediaQueries);
+ _visitNodeList(node.rules);
}
visitHostDirective(HostDirective node) {
- for (var ruleset in node.rulesets) {
- visitRuleSet(ruleset);
- }
+ _visitNodeList(node.rules);
}
visitPageDirective(PageDirective node) {
@@ -237,7 +231,7 @@
}
visitStyletDirective(StyletDirective node) {
- _visitNodeList(node.rulesets);
+ _visitNodeList(node.rules);
}
visitNamespaceDirective(NamespaceDirective node) {}
diff --git a/pub/csslib/pubspec.yaml b/pub/csslib/pubspec.yaml
index ac5d5c5..2111ec9 100644
--- a/pub/csslib/pubspec.yaml
+++ b/pub/csslib/pubspec.yaml
@@ -1,5 +1,5 @@
name: csslib
-version: 0.13.7+1
+version: 0.14.0
author: Dart Team <misc@dartlang.org>
description: A library for parsing CSS.
homepage: https://github.com/dart-lang/csslib
diff --git a/pub/html/BUILD.gn b/pub/html/BUILD.gn
index 98facce..1b6dba1 100644
--- a/pub/html/BUILD.gn
+++ b/pub/html/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for html-0.13.1
+# This file is generated by importer.py for html-0.13.2
import("//build/dart/dart_package.gni")
diff --git a/pub/html/CHANGELOG.md b/pub/html/CHANGELOG.md
index dbf745c..af73106 100644
--- a/pub/html/CHANGELOG.md
+++ b/pub/html/CHANGELOG.md
@@ -1,7 +1,6 @@
-# changelog
+## 0.13.2
-This file contains highlights of what changes on each version of the html
-package.
+ * Support the latest release of `pkg/csslib`.
## 0.13.1
* Update Set.difference to take a Set<Object>.
diff --git a/pub/html/lib/dom.dart b/pub/html/lib/dom.dart
index 63182f6..bd3e2bd 100644
--- a/pub/html/lib/dom.dart
+++ b/pub/html/lib/dom.dart
@@ -809,7 +809,6 @@
// TODO(jmesserly): "implements List<Element>" is a workaround for analyzer bug.
class FilteredElementList extends IterableBase<Element> with ListMixin<Element>
implements List<Element> {
- final Node _node;
final List<Node> _childNodes;
/// Creates a collection of the elements that descend from a node.
@@ -819,8 +818,8 @@
/// var filteredElements = new FilteredElementList(query("#container"));
/// // filteredElements is [a, b, c].
FilteredElementList(Node node)
- : _childNodes = node.nodes,
- _node = node;
+ : _childNodes = node.nodes;
+
// We can't memoize this, since it's possible that children will be messed
// with externally to this class.
diff --git a/pub/html/lib/src/encoding_parser.dart b/pub/html/lib/src/encoding_parser.dart
index 0b84989..9da260b 100644
--- a/pub/html/lib/src/encoding_parser.dart
+++ b/pub/html/lib/src/encoding_parser.dart
@@ -200,7 +200,6 @@
}
}
}
- return true; // unreachable
}
bool handlePossibleStartTag() => handlePossibleTag(false);
@@ -322,7 +321,6 @@
attrValue.add(c);
}
}
- return null; // unreachable
}
}
diff --git a/pub/html/pubspec.yaml b/pub/html/pubspec.yaml
index cceb1e4..5e9f0d5 100644
--- a/pub/html/pubspec.yaml
+++ b/pub/html/pubspec.yaml
@@ -1,12 +1,12 @@
name: html
-version: 0.13.1
+version: 0.13.2
author: Dart Team <misc@dartlang.org>
description: A library for working with HTML documents. Previously known as html5lib.
homepage: https://github.com/dart-lang/html
environment:
- sdk: '>=1.21.0-dev.2.0 <2.0.0'
+ sdk: '>=1.21.0 <2.0.0'
dependencies:
- csslib: '>=0.13.2 <0.14.0'
+ csslib: '>=0.13.2 <0.15.0'
source_span: '>=1.0.0 <2.0.0'
utf: '>=0.9.0 <0.10.0'
dev_dependencies:
diff --git a/pub/path_provider/.gitignore b/pub/path_provider/.gitignore
new file mode 100644
index 0000000..14c7d4c
--- /dev/null
+++ b/pub/path_provider/.gitignore
@@ -0,0 +1,9 @@
+.DS_Store
+.atom/
+.idea
+.packages
+.pub/
+build/
+ios/.generated/
+packages
+pubspec.lock
diff --git a/pub/path_provider/BUILD.gn b/pub/path_provider/BUILD.gn
new file mode 100644
index 0000000..392470d
--- /dev/null
+++ b/pub/path_provider/BUILD.gn
@@ -0,0 +1,15 @@
+# This file is generated by importer.py for path_provider-0.2.1+1
+
+import("//build/dart/dart_package.gni")
+
+dart_package("path_provider") {
+ package_name = "path_provider"
+
+ source_dir = "lib"
+
+ disable_analysis = true
+
+ deps = [
+ "//lib/flutter/packages/flutter",
+ ]
+}
diff --git a/pub/path_provider/CHANGELOG.md b/pub/path_provider/CHANGELOG.md
new file mode 100644
index 0000000..ffed6b8
--- /dev/null
+++ b/pub/path_provider/CHANGELOG.md
@@ -0,0 +1,27 @@
+## [0.2.1+1] - 2017-05-16
+
+* Updated README
+
+## [0.2.1] - 2017-05-16
+
+* Add function to determine external storage directory.
+
+## [0.2.0] - 2017-05-10
+
+* Upgrade to new plugin registration. (https://groups.google.com/forum/#!topic/flutter-dev/zba1Ynf2OKM)
+
+## [0.1.3] - 2017-05-09
+
+* Upgrade Android SDK Build Tools to 25.0.3.
+
+## [0.1.2] - 2017-05-08
+
+* Add test.
+
+## [0.1.1] - 2017-05-04
+
+* Change to README.md.
+
+## [0.1.0] - 2017-05-03
+
+* Initial Open Source release.
diff --git a/pub/path_provider/LICENSE b/pub/path_provider/LICENSE
new file mode 100644
index 0000000..566f5b5
--- /dev/null
+++ b/pub/path_provider/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2017, the Flutter project authors. 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 Google Inc. 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
+OWNER 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.
\ No newline at end of file
diff --git a/pub/path_provider/README.md b/pub/path_provider/README.md
new file mode 100644
index 0000000..944137f
--- /dev/null
+++ b/pub/path_provider/README.md
@@ -0,0 +1,21 @@
+# path_provider
+
+[![pub package](https://img.shields.io/pub/v/path_provider.svg)](https://pub.dartlang.org/packages/path_provider)
+
+A Flutter plugin for finding commonly used locations on the filesystem. Supports iOS and Android.
+
+## Usage
+
+To use this plugin, add `path_provider` as a [dependency in your pubspec.yaml file](https://flutter.io/platform-plugins/).
+
+### Example
+
+``` dart
+Directory tempDir = await getTemporaryDirectory();
+String tempPath = tempDir.path;
+
+Directory appDocDir = await getApplicationDocumentsDirectory();
+String appDocPath = appDocDir.path;
+```
+
+Please see the example app of this plugin for a full example.
diff --git a/pub/path_provider/android/.gitignore b/pub/path_provider/android/.gitignore
new file mode 100644
index 0000000..5c4ef82
--- /dev/null
+++ b/pub/path_provider/android/.gitignore
@@ -0,0 +1,12 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+
+/gradle
+/gradlew
+/gradlew.bat
diff --git a/pub/path_provider/android/build.gradle b/pub/path_provider/android/build.gradle
new file mode 100644
index 0000000..7b86f78
--- /dev/null
+++ b/pub/path_provider/android/build.gradle
@@ -0,0 +1,32 @@
+group 'io.flutter.plugins.path_provider'
+version '1.0-SNAPSHOT'
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:2.3.0'
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 25
+ buildToolsVersion '25.0.3'
+
+ defaultConfig {
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+}
diff --git a/pub/path_provider/android/gradle.properties b/pub/path_provider/android/gradle.properties
new file mode 100644
index 0000000..8bd86f6
--- /dev/null
+++ b/pub/path_provider/android/gradle.properties
@@ -0,0 +1 @@
+org.gradle.jvmargs=-Xmx1536M
diff --git a/pub/path_provider/android/settings.gradle b/pub/path_provider/android/settings.gradle
new file mode 100644
index 0000000..71bc907
--- /dev/null
+++ b/pub/path_provider/android/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'path_provider'
diff --git a/pub/path_provider/android/src/main/AndroidManifest.xml b/pub/path_provider/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..7eb61d3
--- /dev/null
+++ b/pub/path_provider/android/src/main/AndroidManifest.xml
@@ -0,0 +1,7 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="io.flutter.plugins.path_provider"
+ android:versionCode="1"
+ android:versionName="0.0.1">
+
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
+</manifest>
diff --git a/pub/path_provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java b/pub/path_provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java
new file mode 100644
index 0000000..2b507d2
--- /dev/null
+++ b/pub/path_provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java
@@ -0,0 +1,58 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package io.flutter.plugins.path_provider;
+
+import android.app.Activity;
+import android.os.Environment;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
+import io.flutter.plugin.common.PluginRegistry.Registrar;
+import io.flutter.util.PathUtils;
+
+public class PathProviderPlugin implements MethodCallHandler {
+ private final Activity activity;
+
+ public static void registerWith(Registrar registrar) {
+ MethodChannel channel =
+ new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider");
+ PathProviderPlugin instance = new PathProviderPlugin(registrar.activity());
+ channel.setMethodCallHandler(instance);
+ }
+
+ private PathProviderPlugin(Activity activity) {
+ this.activity = activity;
+ }
+
+ @Override
+ public void onMethodCall(MethodCall call, Result result) {
+ switch (call.method) {
+ case "getTemporaryDirectory":
+ result.success(getPathProviderTemporaryDirectory());
+ break;
+ case "getApplicationDocumentsDirectory":
+ result.success(getPathProviderApplicationDocumentsDirectory());
+ break;
+ case "getStorageDirectory":
+ result.success(getPathProviderStorageDirectory());
+ break;
+ default:
+ result.notImplemented();
+ }
+ }
+
+ private String getPathProviderTemporaryDirectory() {
+ return activity.getCacheDir().getPath();
+ }
+
+ private String getPathProviderApplicationDocumentsDirectory() {
+ return PathUtils.getDataDirectory(activity);
+ }
+
+ private String getPathProviderStorageDirectory() {
+ return Environment.getExternalStorageDirectory().getAbsolutePath();
+ }
+}
diff --git a/pub/path_provider/example/.gitignore b/pub/path_provider/example/.gitignore
new file mode 100644
index 0000000..eb15c3d
--- /dev/null
+++ b/pub/path_provider/example/.gitignore
@@ -0,0 +1,10 @@
+.DS_Store
+.atom/
+.idea
+.packages
+.pub/
+build/
+ios/.generated/
+packages
+pubspec.lock
+.flutter-plugins
diff --git a/pub/path_provider/example/README.md b/pub/path_provider/example/README.md
new file mode 100644
index 0000000..f1564c6
--- /dev/null
+++ b/pub/path_provider/example/README.md
@@ -0,0 +1,8 @@
+# path_provider_example
+
+Demonstrates how to use the path_provider plugin.
+
+## Getting Started
+
+For help getting started with Flutter, view our online
+[documentation](http://flutter.io/).
diff --git a/pub/path_provider/example/android.iml b/pub/path_provider/example/android.iml
new file mode 100644
index 0000000..462b903
--- /dev/null
+++ b/pub/path_provider/example/android.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$/android">
+ <sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
+ </content>
+ <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" name="Flutter for Android" level="project" />
+ </component>
+</module>
diff --git a/pub/path_provider/example/android/.gitignore b/pub/path_provider/example/android/.gitignore
new file mode 100644
index 0000000..5c4ef82
--- /dev/null
+++ b/pub/path_provider/example/android/.gitignore
@@ -0,0 +1,12 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+
+/gradle
+/gradlew
+/gradlew.bat
diff --git a/pub/path_provider/example/android/app/build.gradle b/pub/path_provider/example/android/app/build.gradle
new file mode 100644
index 0000000..114a0ee
--- /dev/null
+++ b/pub/path_provider/example/android/app/build.gradle
@@ -0,0 +1,46 @@
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withInputStream { stream ->
+ localProperties.load(stream)
+ }
+}
+
+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.")
+}
+
+apply plugin: 'com.android.application'
+apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
+
+android {
+ compileSdkVersion 25
+ buildToolsVersion '25.0.3'
+
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+ defaultConfig {
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {
+ androidTestCompile 'com.android.support:support-annotations:25.0.0'
+ androidTestCompile 'com.android.support.test:runner:0.5'
+ androidTestCompile 'com.android.support.test:rules:0.5'
+}
diff --git a/pub/path_provider/example/android/app/src/main/AndroidManifest.xml b/pub/path_provider/example/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..936e2b8
--- /dev/null
+++ b/pub/path_provider/example/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,32 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="io.flutter.plugins.path_provider_example"
+ android:versionCode="1"
+ android:versionName="0.0.1">
+
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
+
+ <!-- The INTERNET permission is required for development. Specifically,
+ 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"/>
+
+ <!-- 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. -->
+ <application android:name="io.flutter.app.FlutterApplication" android:label="path_provider_example" android:icon="@mipmap/ic_launcher">
+ <activity android:name=".MainActivity"
+ android:launchMode="singleTop"
+ android:theme="@android:style/Theme.Black.NoTitleBar"
+ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
+ android:hardwareAccelerated="true"
+ android:windowSoftInputMode="adjustResize">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/pub/path_provider/example/android/app/src/main/java/io/flutter/plugins/path_provider_example/MainActivity.java b/pub/path_provider/example/android/app/src/main/java/io/flutter/plugins/path_provider_example/MainActivity.java
new file mode 100644
index 0000000..a4df125
--- /dev/null
+++ b/pub/path_provider/example/android/app/src/main/java/io/flutter/plugins/path_provider_example/MainActivity.java
@@ -0,0 +1,14 @@
+package io.flutter.plugins.path_provider_example;
+
+import android.os.Bundle;
+import io.flutter.app.FlutterActivity;
+import io.flutter.plugins.GeneratedPluginRegistrant;
+
+public class MainActivity extends FlutterActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ GeneratedPluginRegistrant.registerWith(this);
+ }
+}
diff --git a/pub/path_provider/example/android/build.gradle b/pub/path_provider/example/android/build.gradle
new file mode 100644
index 0000000..ee5325d
--- /dev/null
+++ b/pub/path_provider/example/android/build.gradle
@@ -0,0 +1,29 @@
+buildscript {
+ repositories {
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:2.2.3'
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+ project.evaluationDependsOn(':app')
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
+
+task wrapper(type: Wrapper) {
+ gradleVersion = '2.14.1'
+}
diff --git a/pub/path_provider/example/android/gradle.properties b/pub/path_provider/example/android/gradle.properties
new file mode 100644
index 0000000..8bd86f6
--- /dev/null
+++ b/pub/path_provider/example/android/gradle.properties
@@ -0,0 +1 @@
+org.gradle.jvmargs=-Xmx1536M
diff --git a/pub/path_provider/example/android/settings.gradle b/pub/path_provider/example/android/settings.gradle
new file mode 100644
index 0000000..115da6c
--- /dev/null
+++ b/pub/path_provider/example/android/settings.gradle
@@ -0,0 +1,15 @@
+include ':app'
+
+def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
+
+def plugins = new Properties()
+def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
+if (pluginsFile.exists()) {
+ pluginsFile.withInputStream { stream -> plugins.load(stream) }
+}
+
+plugins.each { name, path ->
+ def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
+ include ":$name"
+ project(":$name").projectDir = pluginDirectory
+}
diff --git a/pub/path_provider/example/ios/.gitignore b/pub/path_provider/example/ios/.gitignore
new file mode 100644
index 0000000..d0a7d98
--- /dev/null
+++ b/pub/path_provider/example/ios/.gitignore
@@ -0,0 +1,37 @@
+.idea/
+.vagrant/
+.sconsign.dblite
+.svn/
+
+.DS_Store
+*.swp
+profile
+
+DerivedData/
+build/
+
+*.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/App.framework
+/Flutter/Flutter.framework
+/Flutter/Generated.xcconfig
+/ServiceDefinitions.json
diff --git a/pub/path_provider/example/ios/Flutter/AppFrameworkInfo.plist b/pub/path_provider/example/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..6c2de80
--- /dev/null
+++ b/pub/path_provider/example/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,30 @@
+<?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>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>arm64</string>
+ </array>
+ <key>MinimumOSVersion</key>
+ <string>8.0</string>
+</dict>
+</plist>
diff --git a/pub/path_provider/example/ios/Flutter/Debug.xcconfig b/pub/path_provider/example/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..9803018
--- /dev/null
+++ b/pub/path_provider/example/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "Generated.xcconfig"
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
diff --git a/pub/path_provider/example/ios/Flutter/Release.xcconfig b/pub/path_provider/example/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..a4a8c60
--- /dev/null
+++ b/pub/path_provider/example/ios/Flutter/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "Generated.xcconfig"
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
diff --git a/pub/path_provider/example/ios/Podfile b/pub/path_provider/example/ios/Podfile
new file mode 100644
index 0000000..74b3de0
--- /dev/null
+++ b/pub/path_provider/example/ios/Podfile
@@ -0,0 +1,38 @@
+# Uncomment this line to define a global platform for your project
+# platform :ios, '9.0'
+
+if ENV['FLUTTER_FRAMEWORK_DIR'] == nil
+ abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework')
+end
+
+target 'Runner' do
+ use_frameworks!
+
+ # Pods for Runner
+
+ # Flutter Pods
+ pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']
+
+ if File.exists? '../.flutter-plugins'
+ flutter_root = File.expand_path('..')
+ File.foreach('../.flutter-plugins') { |line|
+ plugin = line.split(pattern='=')
+ if plugin.length == 2
+ name = plugin[0].strip()
+ path = plugin[1].strip()
+ resolved_path = File.expand_path("#{path}/ios", flutter_root)
+ pod name, :path => resolved_path
+ else
+ puts "Invalid plugin specification: #{line}"
+ end
+ }
+ end
+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
diff --git a/pub/path_provider/example/ios/Runner.xcodeproj/project.pbxproj b/pub/path_provider/example/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..34e2030
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,491 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 0675671949C15323862C164B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06B796751C0435964931B69B /* Pods_Runner.framework */; };
+ 2D9222481EC32A19007564B0 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9222471EC32A19007564B0 /* GeneratedPluginRegistrant.m */; };
+ 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, ); }; };
+ 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, ); }; };
+ 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
+ 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; };
+ 9740EEBB1CF902C7004384FC /* app.flx in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB71CF902C7004384FC /* app.flx */; };
+ 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 */
+ 06B796751C0435964931B69B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2D9222461EC32A19007564B0 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
+ 2D9222471EC32A19007564B0 /* 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>"; };
+ 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>"; };
+ 9740EEB71CF902C7004384FC /* app.flx */ = {isa = PBXFileReference; lastKnownFileType = file; name = app.flx; path = Flutter/app.flx; 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>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
+ 3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
+ 0675671949C15323862C164B /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 840012C8B5EDBCF56B0E4AC1 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB71CF902C7004384FC /* app.flx */,
+ 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 = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ 840012C8B5EDBCF56B0E4AC1 /* Pods */,
+ CF3B75C9A7D2FA2A4C99F110 /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 2D9222461EC32A19007564B0 /* GeneratedPluginRegistrant.h */,
+ 2D9222471EC32A19007564B0 /* GeneratedPluginRegistrant.m */,
+ 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
+ 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 97C146F11CF9000F007C117D /* Supporting Files */,
+ );
+ path = Runner;
+ sourceTree = "<group>";
+ };
+ 97C146F11CF9000F007C117D /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146F21CF9000F007C117D /* main.m */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ CF3B75C9A7D2FA2A4C99F110 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 06B796751C0435964931B69B /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 95BB15E9E1769C0D146AA592 /* [CP] Embed Pods Frameworks */,
+ 532EA9D341340B1DCD08293D /* [CP] Copy Pods Resources */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ );
+ 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 = 0830;
+ ORGANIZATIONNAME = "The Chromium Authors";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ 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 = (
+ 9740EEBB1CF902C7004384FC /* app.flx in Resources */,
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard 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";
+ };
+ 532EA9D341340B1DCD08293D /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 95BB15E9E1769C0D146AA592 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\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";
+ };
+ AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../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";
+ 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 */,
+ 2D9222481EC32A19007564B0 /* 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_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
+ 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_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
+ 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 = {
+ ARCHS = arm64;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ 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 = io.flutter.plugins.pathProviderExample;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ARCHS = arm64;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ 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 = io.flutter.plugins.pathProviderExample;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ 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 */;
+}
diff --git a/pub/path_provider/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/pub/path_provider/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?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>
diff --git a/pub/path_provider/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/pub/path_provider/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..1c95807
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0830"
+ 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 = "Debug"
+ 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>
diff --git a/pub/path_provider/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/pub/path_provider/example/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?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>
diff --git a/pub/path_provider/example/ios/Runner/AppDelegate.h b/pub/path_provider/example/ios/Runner/AppDelegate.h
new file mode 100644
index 0000000..36e21bb
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/AppDelegate.h
@@ -0,0 +1,6 @@
+#import <Flutter/Flutter.h>
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : FlutterAppDelegate
+
+@end
diff --git a/pub/path_provider/example/ios/Runner/AppDelegate.m b/pub/path_provider/example/ios/Runner/AppDelegate.m
new file mode 100644
index 0000000..0e94ecd
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/AppDelegate.m
@@ -0,0 +1,12 @@
+#include "AppDelegate.h"
+#include "GeneratedPluginRegistrant.h"
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application
+ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ [GeneratedPluginRegistrant registerWithRegistry:self];
+ return [super application:application didFinishLaunchingWithOptions:launchOptions];
+}
+
+@end
diff --git a/pub/path_provider/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/pub/path_provider/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d22f10b
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,116 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/pub/path_provider/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/pub/path_provider/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..ebf48f6
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="EHf-IW-A2E">
+ <objects>
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+ <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="53" y="375"/>
+ </scene>
+ </scenes>
+</document>
diff --git a/pub/path_provider/example/ios/Runner/Base.lproj/Main.storyboard b/pub/path_provider/example/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+ </dependencies>
+ <scenes>
+ <!--Flutter View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+ <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ </scene>
+ </scenes>
+</document>
diff --git a/pub/path_provider/example/ios/Runner/Info.plist b/pub/path_provider/example/ios/Runner/Info.plist
new file mode 100644
index 0000000..342db6a
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+<?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>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>path_provider_example</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UILaunchStoryboardName</key>
+ <string>LaunchScreen</string>
+ <key>UIMainStoryboardFile</key>
+ <string>Main</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>arm64</string>
+ </array>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UIViewControllerBasedStatusBarAppearance</key>
+ <false/>
+</dict>
+</plist>
diff --git a/pub/path_provider/example/ios/Runner/main.m b/pub/path_provider/example/ios/Runner/main.m
new file mode 100644
index 0000000..dff6597
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/main.m
@@ -0,0 +1,9 @@
+#import <Flutter/Flutter.h>
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char* argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/pub/path_provider/example/lib/main.dart b/pub/path_provider/example/lib/main.dart
new file mode 100644
index 0000000..591cbf9
--- /dev/null
+++ b/pub/path_provider/example/lib/main.dart
@@ -0,0 +1,139 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:path_provider/path_provider.dart';
+
+void main() {
+ runApp(new MyApp());
+}
+
+class MyApp extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return new MaterialApp(
+ title: 'Path Provider',
+ theme: new ThemeData(
+ primarySwatch: Colors.blue,
+ ),
+ home: new MyHomePage(title: 'Path Provider'),
+ );
+ }
+}
+
+class MyHomePage extends StatefulWidget {
+ MyHomePage({Key key, this.title}) : super(key: key);
+ final String title;
+
+ @override
+ _MyHomePageState createState() => new _MyHomePageState();
+}
+
+class _MyHomePageState extends State<MyHomePage> {
+ Future<Directory> _tempDirectory;
+ Future<Directory> _appDocumentsDirectory;
+ Future<Directory> _externalDocumentsDirectory;
+
+ void _requestTempDirectory() {
+ setState(() {
+ _tempDirectory = getTemporaryDirectory();
+ });
+ }
+
+ Widget _buildDirectory(
+ BuildContext context, AsyncSnapshot<Directory> snapshot) {
+
+ Text text = const Text('');
+ if (snapshot.connectionState == ConnectionState.done) {
+ if (snapshot.hasError) {
+ text = new Text('Error: ${snapshot.error}');
+ } else if (snapshot.hasData) {
+ text = new Text('path: ${snapshot.data.path}');
+ } else {
+ text = const Text('path unavailable');
+ }
+ }
+ return new Padding(padding: const EdgeInsets.all(16.0), child: text);
+ }
+
+ void _requestAppDocumentsDirectory() {
+ setState(() {
+ _appDocumentsDirectory = getApplicationDocumentsDirectory();
+ });
+ }
+
+ void _requestExternalStorageDirectory() {
+ setState(() {
+ _externalDocumentsDirectory = getExternalStorageDirectory();
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return new Scaffold(
+ appBar: new AppBar(
+ title: new Text(widget.title),
+ ),
+ body: new Center(
+ child: new Column(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ children: <Widget>[
+ new Column(
+ children: <Widget>[
+ new Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: new RaisedButton(
+ child: const Text('Get Temporary Directory'),
+ onPressed: _requestTempDirectory,
+ ),
+ ),
+ ],
+ ),
+ new Expanded(
+ child: new FutureBuilder<Directory>(
+ future: _tempDirectory, builder: _buildDirectory),
+ ),
+ new Column(
+ children: <Widget>[
+ new Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: new RaisedButton(
+ child: const Text('Get Application Documents Directory'),
+ onPressed: _requestAppDocumentsDirectory,
+ ),
+ ),
+ ],
+ ),
+ new Expanded(
+ child: new FutureBuilder<Directory>(
+ future: _appDocumentsDirectory, builder: _buildDirectory),
+ ),
+ new Column(
+ children : <Widget>[
+ new Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: new RaisedButton(
+ child: new Text('${Platform.isIOS ?
+ "External directories are unavailable " +
+ "on iOS":
+ "Get External Storage Directory" }'),
+ onPressed: Platform.isIOS ? null :
+ _requestExternalStorageDirectory,
+ ),
+ ),
+ ]
+ ),
+ new Expanded(
+ child: new FutureBuilder<Directory>(
+ future: _externalDocumentsDirectory, builder: _buildDirectory),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/pub/path_provider/example/path_provider_example.iml b/pub/path_provider/example/path_provider_example.iml
new file mode 100644
index 0000000..9d5dae1
--- /dev/null
+++ b/pub/path_provider/example/path_provider_example.iml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="FLUTTER_MODULE_TYPE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <excludeFolder url="file://$MODULE_DIR$/.idea" />
+ <excludeFolder url="file://$MODULE_DIR$/.pub" />
+ <excludeFolder url="file://$MODULE_DIR$/build" />
+ <excludeFolder url="file://$MODULE_DIR$/packages" />
+ </content>
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" name="Dart Packages" level="project" />
+ <orderEntry type="library" name="Dart SDK" level="project" />
+ </component>
+</module>
\ No newline at end of file
diff --git a/pub/path_provider/example/pubspec.yaml b/pub/path_provider/example/pubspec.yaml
new file mode 100644
index 0000000..e95c465
--- /dev/null
+++ b/pub/path_provider/example/pubspec.yaml
@@ -0,0 +1,11 @@
+name: path_provider_example
+description: Demonstrates how to use the path_provider plugin.
+
+dependencies:
+ flutter:
+ sdk: flutter
+ path_provider:
+ path: ../
+
+flutter:
+ uses-material-design: true
diff --git a/pub/path_provider/ios/.gitignore b/pub/path_provider/ios/.gitignore
new file mode 100644
index 0000000..956c87f
--- /dev/null
+++ b/pub/path_provider/ios/.gitignore
@@ -0,0 +1,31 @@
+.idea/
+.vagrant/
+.sconsign.dblite
+.svn/
+
+.DS_Store
+*.swp
+profile
+
+DerivedData/
+build/
+
+*.pbxuser
+*.mode1v3
+*.mode2v3
+*.perspectivev3
+
+!default.pbxuser
+!default.mode1v3
+!default.mode2v3
+!default.perspectivev3
+
+xcuserdata
+
+*.moved-aside
+
+*.pyc
+*sync/
+Icon?
+.tags*
+
diff --git a/pub/path_provider/ios/Assets/.gitkeep b/pub/path_provider/ios/Assets/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pub/path_provider/ios/Assets/.gitkeep
diff --git a/pub/path_provider/ios/Classes/PathProviderPlugin.h b/pub/path_provider/ios/Classes/PathProviderPlugin.h
new file mode 100644
index 0000000..21f0669
--- /dev/null
+++ b/pub/path_provider/ios/Classes/PathProviderPlugin.h
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Flutter/Flutter.h>
+
+@interface PathProviderPlugin : NSObject<FlutterPlugin>
+@end
diff --git a/pub/path_provider/ios/Classes/PathProviderPlugin.m b/pub/path_provider/ios/Classes/PathProviderPlugin.m
new file mode 100644
index 0000000..8ecdde5
--- /dev/null
+++ b/pub/path_provider/ios/Classes/PathProviderPlugin.m
@@ -0,0 +1,38 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "PathProviderPlugin.h"
+
+NSString* GetDirectoryOfType(NSSearchPathDirectory dir) {
+ NSArray* paths = NSSearchPathForDirectoriesInDomains(dir, NSUserDomainMask, YES);
+ if (paths.count == 0) return nil;
+ return paths.firstObject;
+}
+
+@implementation PathProviderPlugin
+
++ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
+ FlutterMethodChannel* channel =
+ [FlutterMethodChannel methodChannelWithName:@"plugins.flutter.io/path_provider"
+ binaryMessenger:registrar.messenger];
+ [channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
+ if ([@"getTemporaryDirectory" isEqualToString:call.method]) {
+ result([self getTemporaryDirectory]);
+ } else if ([@"getApplicationDocumentsDirectory" isEqualToString:call.method]) {
+ result([self getApplicationDocumentsDirectory]);
+ } else {
+ result(FlutterMethodNotImplemented);
+ }
+ }];
+}
+
++ (NSString*)getTemporaryDirectory {
+ return GetDirectoryOfType(NSCachesDirectory);
+}
+
++ (NSString*)getApplicationDocumentsDirectory {
+ return GetDirectoryOfType(NSDocumentDirectory);
+}
+
+@end
diff --git a/pub/path_provider/ios/path_provider.podspec b/pub/path_provider/ios/path_provider.podspec
new file mode 100644
index 0000000..7ca6fe3
--- /dev/null
+++ b/pub/path_provider/ios/path_provider.podspec
@@ -0,0 +1,21 @@
+#
+# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
+#
+Pod::Spec.new do |s|
+ s.name = 'path_provider'
+ s.version = '0.0.1'
+ s.summary = 'A Flutter plugin for getting commonly used locations on the filesystem.'
+ s.description = <<-DESC
+A Flutter plugin for getting commonly used locations on the filesystem.
+ DESC
+ s.homepage = 'https://github.com/flutter/plugins/tree/master/packages/path_provider'
+ s.license = { :file => '../LICENSE' }
+ s.author = { 'Flutter Team' => 'flutter-dev@googlegroups.com' }
+ s.source = { :path => '.' }
+ s.source_files = 'Classes/**/*'
+ s.public_header_files = 'Classes/**/*.h'
+ s.dependency 'Flutter'
+
+ s.ios.deployment_target = '8.0'
+end
+
diff --git a/pub/path_provider/lib/path_provider.dart b/pub/path_provider/lib/path_provider.dart
new file mode 100644
index 0000000..21a8cb5
--- /dev/null
+++ b/pub/path_provider/lib/path_provider.dart
@@ -0,0 +1,59 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:flutter/services.dart';
+
+const _channel = const MethodChannel('plugins.flutter.io/path_provider');
+
+ /// Path to the temporary directory on the device.
+ ///
+ /// Files in this directory may be cleared at any time. This does *not* return
+ /// a new temporary directory. Instead, the caller is responsible for creating
+ /// (and cleaning up) files or directories within this directory. This
+ /// directory is scoped to the calling application.
+ ///
+ /// On iOS, this uses the `NSTemporaryDirectory` API.
+ ///
+ /// On Android, this uses the `getCacheDir` API on the context.
+ Future<Directory> getTemporaryDirectory() async {
+ final String path = await _channel.invokeMethod('getTemporaryDirectory');
+ if (path == null)
+ return null;
+ return new Directory(path);
+ }
+
+ /// Path to a directory where the application may place files that are private
+ /// to the application and will only be cleared when the application itself
+ /// is deleted.
+ ///
+ /// On iOS, this uses the `NSDocumentsDirectory` API.
+ ///
+ /// On Android, this returns the AppData directory.
+ Future<Directory> getApplicationDocumentsDirectory() async {
+ final String path = await _channel.invokeMethod(
+ 'getApplicationDocumentsDirectory');
+ if (path == null)
+ return null;
+ return new Directory(path);
+ }
+
+ /// Path to a directory where the application may access top level storage.
+ /// The current operating system should be determined before issuing this
+ /// function call, as this functionality is only available on Android.
+ ///
+ /// On iOS, this function throws an UnsupportedError as it is not possible
+ /// to access outside the app's sandbox.
+ ///
+ /// On Android this returns getExternalStorageDirectory.
+ Future<Directory> getExternalStorageDirectory() async {
+ if (Platform.isIOS)
+ throw new UnsupportedError("Functionality not available on iOS");
+ final String path = await _channel.invokeMethod('getStorageDirectory');
+ if (path == null)
+ return null;
+ return new Directory(path);
+ }
diff --git a/pub/path_provider/pubspec.yaml b/pub/path_provider/pubspec.yaml
new file mode 100644
index 0000000..b46794a
--- /dev/null
+++ b/pub/path_provider/pubspec.yaml
@@ -0,0 +1,21 @@
+name: path_provider
+
+version: 0.2.1+1
+description: A Flutter plugin for getting commonly used locations on the filesystem.
+author: Flutter Team <flutter-dev@googlegroups.com>
+homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider
+
+flutter:
+ plugin:
+ androidPackage: io.flutter.plugins.path_provider
+ pluginClass: PathProviderPlugin
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+dev_dependencies:
+ test:
+
+environment:
+ sdk: ">=1.8.0 <2.0.0"