main.dart 7,8 КБ
Newer Older
4-alok's avatar
4-alok включено в состав коммита
1
2
import 'dart:io';

4-alok's avatar
4-alok включено в состав коммита
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import 'package:file_manager/file_manager.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
Divyanshu Shekhar's avatar
Divyanshu Shekhar включено в состав коммита
25
  final FileManagerController controller = FileManagerController();
4-alok's avatar
4-alok включено в состав коммита
26
27
28

  @override
  Widget build(BuildContext context) {
4-alok's avatar
4-alok включено в состав коммита
29
30
    return ControlBackButton(
      controller: controller,
4-alok's avatar
4-alok включено в состав коммита
31
32
      child: Scaffold(
          appBar: AppBar(
Arpit-Sahu's avatar
Arpit-Sahu включено в состав коммита
33
            actions: [
4-alok's avatar
4-alok включено в состав коммита
34
35
36
37
              IconButton(
                onPressed: () => createFolder(context),
                icon: Icon(Icons.create_new_folder_outlined),
              ),
Divyanshu Shekhar's avatar
Divyanshu Shekhar включено в состав коммита
38
              IconButton(
4-alok's avatar
4-alok включено в состав коммита
39
40
41
42
43
                onPressed: () => sort(context),
                icon: Icon(Icons.sort_rounded),
              ),
              IconButton(
                onPressed: () => selectStorage(context),
4-alok's avatar
4-alok включено в состав коммита
44
                icon: Icon(Icons.sd_storage_rounded),
Divyanshu Shekhar's avatar
Divyanshu Shekhar включено в состав коммита
45
              )
Arpit-Sahu's avatar
Arpit-Sahu включено в состав коммита
46
            ],
4-alok's avatar
4-alok включено в состав коммита
47
            title: ValueListenableBuilder<String>(
4-alok's avatar
4-alok включено в состав коммита
48
              valueListenable: controller.titleNotifier,
4-alok's avatar
4-alok включено в состав коммита
49
              builder: (context, title, _) => Text(title),
4-alok's avatar
4-alok включено в состав коммита
50
            ),
4-alok's avatar
4-alok включено в состав коммита
51
52
            leading: IconButton(
              icon: Icon(Icons.arrow_back),
Arpit-Sahu's avatar
Arpit-Sahu включено в состав коммита
53
              onPressed: () async {
4-alok's avatar
4-alok включено в состав коммита
54
                await controller.goToParentDirectory();
Arpit-Sahu's avatar
Arpit-Sahu включено в состав коммита
55
              },
4-alok's avatar
4-alok включено в состав коммита
56
57
58
59
60
61
            ),
          ),
          body: Container(
            margin: EdgeInsets.all(10),
            child: FileManager(
              controller: controller,
4-alok's avatar
4-alok включено в состав коммита
62
              builder: (context, snapshot) {
4-alok's avatar
4-alok включено в состав коммита
63
                final List<FileSystemEntity> entities = snapshot;
4-alok's avatar
4-alok включено в состав коммита
64
                return ListView.builder(
4-alok's avatar
4-alok включено в состав коммита
65
                  itemCount: entities.length,
4-alok's avatar
4-alok включено в состав коммита
66
                  itemBuilder: (context, index) {
4-alok's avatar
4-alok включено в состав коммита
67
                    FileSystemEntity entity = entities[index];
4-alok's avatar
4-alok включено в состав коммита
68
69
                    return Card(
                      child: ListTile(
4-alok's avatar
4-alok включено в состав коммита
70
                        leading: FileManager.isFile(entity)
4-alok's avatar
4-alok включено в состав коммита
71
72
                            ? Icon(Icons.feed_outlined)
                            : Icon(Icons.folder),
4-alok's avatar
4-alok включено в состав коммита
73
                        title: Text(FileManager.basename(entity)),
4-alok's avatar
4-alok включено в состав коммита
74
75
                        subtitle: subtitle(entity),
                        onTap: () async {
4-alok's avatar
4-alok включено в состав коммита
76
                          if (FileManager.isDirectory(entity)) {
4-alok's avatar
4-alok включено в состав коммита
77
78
                            // open the folder
                            controller.openDirectory(entity);
4-alok's avatar
4-alok включено в состав коммита
79
    
4-alok's avatar
4-alok включено в состав коммита
80
81
                            // delete a folder
                            // await entity.delete(recursive: true);
4-alok's avatar
4-alok включено в состав коммита
82
    
4-alok's avatar
4-alok включено в состав коммита
83
84
                            // rename a folder
                            // await entity.rename("newPath");
4-alok's avatar
4-alok включено в состав коммита
85
    
4-alok's avatar
4-alok включено в состав коммита
86
87
                            // Check weather folder exists
                            // entity.exists();
4-alok's avatar
4-alok включено в состав коммита
88
    
4-alok's avatar
4-alok включено в состав коммита
89
90
91
92
93
                            // get date of file
                            // DateTime date = (await entity.stat()).modified;
                          } else {
                            // delete a file
                            // await entity.delete();
4-alok's avatar
4-alok включено в состав коммита
94
    
4-alok's avatar
4-alok включено в состав коммита
95
96
                            // rename a file
                            // await entity.rename("newPath");
4-alok's avatar
4-alok включено в состав коммита
97
    
4-alok's avatar
4-alok включено в состав коммита
98
99
                            // Check weather file exists
                            // entity.exists();
4-alok's avatar
4-alok включено в состав коммита
100
    
4-alok's avatar
4-alok включено в состав коммита
101
102
                            // get date of file
                            // DateTime date = (await entity.stat()).modified;
4-alok's avatar
4-alok включено в состав коммита
103
    
4-alok's avatar
4-alok включено в состав коммита
104
105
106
                            // get the size of the file
                            // int size = (await entity.stat()).size;
                          }
4-alok's avatar
4-alok включено в состав коммита
107
108
109
110
                        },
                      ),
                    );
                  },
4-alok's avatar
4-alok включено в состав коммита
111
112
113
114
115
116
                );
              },
            ),
          )),
    );
  }
4-alok's avatar
4-alok включено в состав коммита
117
118
119
120
121
122
123
124

  Widget subtitle(FileSystemEntity entity) {
    return FutureBuilder<FileStat>(
      future: entity.stat(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          if (entity is File) {
            int size = snapshot.data!.size;
4-alok's avatar
4-alok включено в состав коммита
125

4-alok's avatar
4-alok включено в состав коммита
126
            return Text(
4-alok's avatar
4-alok включено в состав коммита
127
              "${FileManager.formatBytes(size)}",
4-alok's avatar
4-alok включено в состав коммита
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
            );
          }
          return Text(
            "${snapshot.data!.modified}",
          );
        } else {
          return Text("");
        }
      },
    );
  }

  selectStorage(BuildContext context) {
    showDialog(
      context: context,
      builder: (context) => Dialog(
        child: FutureBuilder<List<Directory>>(
4-alok's avatar
4-alok включено в состав коммита
145
          future: FileManager.getStorageList(),
4-alok's avatar
4-alok включено в состав коммита
146
147
148
149
150
151
152
153
154
155
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              final List<FileSystemEntity> storageList = snapshot.data!;
              return Padding(
                padding: const EdgeInsets.all(10.0),
                child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: storageList
                        .map((e) => ListTile(
                              title: Text(
4-alok's avatar
4-alok включено в состав коммита
156
                                "${FileManager.basename(e)}",
4-alok's avatar
4-alok включено в состав коммита
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
                              ),
                              onTap: () {
                                controller.openDirectory(e);
                                Navigator.pop(context);
                              },
                            ))
                        .toList()),
              );
            }
            return Dialog(
              child: CircularProgressIndicator(),
            );
          },
        ),
      ),
    );
  }

  sort(BuildContext context) async {
    showDialog(
4-alok's avatar
4-alok включено в состав коммита
177
178
179
180
181
182
183
184
185
186
      context: context,
      builder: (context) => Dialog(
        child: Container(
          padding: EdgeInsets.all(10),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              ListTile(
                  title: Text("Name"),
                  onTap: () {
4-alok's avatar
4-alok включено в состав коммита
187
                    controller.sortBy(SortBy.name);
4-alok's avatar
4-alok включено в состав коммита
188
189
190
191
192
                    Navigator.pop(context);
                  }),
              ListTile(
                  title: Text("Size"),
                  onTap: () {
4-alok's avatar
4-alok включено в состав коммита
193
                    controller.sortBy(SortBy.size);
4-alok's avatar
4-alok включено в состав коммита
194
195
196
197
198
                    Navigator.pop(context);
                  }),
              ListTile(
                  title: Text("Date"),
                  onTap: () {
4-alok's avatar
4-alok включено в состав коммита
199
                    controller.sortBy(SortBy.date);
4-alok's avatar
4-alok включено в состав коммита
200
201
202
203
204
                    Navigator.pop(context);
                  }),
              ListTile(
                  title: Text("type"),
                  onTap: () {
4-alok's avatar
4-alok включено в состав коммита
205
                    controller.sortBy(SortBy.type);
4-alok's avatar
4-alok включено в состав коммита
206
207
208
209
210
211
212
213
214
215
216
217
                    Navigator.pop(context);
                  }),
            ],
          ),
        ),
      ),
    );
  }

  createFolder(BuildContext context) async {
    showDialog(
      context: context,
4-alok's avatar
4-alok включено в состав коммита
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
      builder: (context) {
        TextEditingController folderName = TextEditingController();
        return Dialog(
          child: Container(
            padding: EdgeInsets.all(10),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                ListTile(
                  title: TextField(
                    controller: folderName,
                  ),
                ),
                ElevatedButton(
                  onPressed: () async {
                    try {
                      // Create Folder
                      await FileManager.createFolder(
                          controller.getCurrentPath, folderName.text);
                      // Open Created Folder
                      controller.setCurrentPath =
                          controller.getCurrentPath + "/" + folderName.text;
                    } catch (e) {}

4-alok's avatar
4-alok включено в состав коммита
242
                    Navigator.pop(context);
4-alok's avatar
4-alok включено в состав коммита
243
244
245
246
247
                  },
                  child: Text('Create Folder'),
                )
              ],
            ),
4-alok's avatar
4-alok включено в состав коммита
248
          ),
4-alok's avatar
4-alok включено в состав коммита
249
250
        );
      },
4-alok's avatar
4-alok включено в состав коммита
251
    );
4-alok's avatar
4-alok включено в состав коммита
252
  }
4-alok's avatar
4-alok включено в состав коммита
253
}