<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 文件操作 Dart的IO庫包含了文件讀寫的相關類,它屬于Dart語法標準的一部分,所以通過Dart IO庫,無論是Dart VM下的腳本還是Flutter,都是通過Dart IO庫來操作文件的,不過和Dart VM相比,Flutter有一個重要差異是文件系統路徑不同,這是因為Dart VM是運行在PC或服務器操作系統下,而Flutter是運行在移動操作系統中,他們的文件系統會有一些差異。 #### APP目錄 Android和iOS的應用存儲目錄不同,[`PathProvider`](https://pub.dartlang.org/packages/path_provider) 插件提供了一種平臺透明的方式來訪問設備文件系統上的常用位置。該類當前支持訪問兩個文件系統位置: - **臨時目錄:** 可以使用 `getTemporaryDirectory()` 來獲取臨時目錄; 系統可隨時清除的臨時目錄(緩存)。在iOS上,這對應于[`NSTemporaryDirectory()`](https://developer.apple.com/reference/foundation/1409211-nstemporarydirectory) 返回的值。在Android上,這是[`getCacheDir()`](https://developer.android.com/reference/android/content/Context.html#getCacheDir())返回的值。 - **文檔目錄:** 可以使用`getApplicationDocumentsDirectory()`來獲取應用程序的文檔目錄,該目錄用于存儲只有自己可以訪問的文件。只有當應用程序被卸載時,系統才會清除該目錄。在iOS上,這對應于`NSDocumentDirectory`。在Android上,這是`AppData`目錄。 - **外部存儲目錄**:可以使用`getExternalStorageDirectory()`來獲取外部存儲目錄,如SD卡;由于iOS不支持外部目錄,所以在iOS下調用該方法會拋出`UnsupportedError`異常,而在Android下結果是android SDK中`getExternalStorageDirectory`的返回值。 一旦你的Flutter應用程序有一個文件位置的引用,你可以使用[dart:io](https://api.dartlang.org/stable/dart-io/dart-io-library.html)API來執行對文件系統的讀/寫操作。有關使用Dart處理文件和目錄的詳細內容可以參考Dart語言文檔,下面我們看一個簡單的例子。 #### 示例 我們還是以計數器為例,實現在應用退出重啟后可以恢復點擊次數。 這里,我們使用文件來保存數據: 1. 引入PathProvider插件;在`pubspec.yaml`文件中添加如下聲明: ``` path_provider: ^0.4.1 ``` 添加后,執行`flutter packages get` 獲取一下, 版本號可能隨著時間推移會發生變化,讀者可以使用最新版。 2. 實現: ``` import 'dart:io'; import 'dart:async'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; class FileOperationRoute extends StatefulWidget { FileOperationRoute({Key key}) : super(key: key); @override _FileOperationRouteState createState() => new _FileOperationRouteState(); } class _FileOperationRouteState extends State<FileOperationRoute> { int _counter; @override void initState() { super.initState(); //從文件讀取點擊次數 _readCounter().then((int value) { setState(() { _counter = value; }); }); } Future<File> _getLocalFile() async { // 獲取應用目錄 String dir = (await getApplicationDocumentsDirectory()).path; return new File('$dir/counter.txt'); } Future<int> _readCounter() async { try { File file = await _getLocalFile(); // 讀取點擊次數(以字符串) String contents = await file.readAsString(); return int.parse(contents); } on FileSystemException { return 0; } } Future<Null> _incrementCounter() async { setState(() { _counter++; }); // 將點擊次數以字符串類型寫到文件中 await (await _getLocalFile()).writeAsString('$_counter'); } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar(title: new Text('文件操作')), body: new Center( child: new Text('點擊了 $_counter 次'), ), floatingActionButton: new FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: new Icon(Icons.add), ), ); } } ``` 上面代碼比較簡單,不再贅述,需要說明的是,本示例只是為了演示文件讀寫,而在實際開發中,如果要存儲一些簡單的數據,使用shared\_preferences插件會比較簡單。 > 注意,Dart IO庫操作文件的API非常豐富,但本書不是介紹Dart語言的,故不詳細說明,讀者需要的話可以自行學習。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看