Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

根据你的案例我修改了下 #7

Open
tangbincheng opened this issue Sep 1, 2021 · 0 comments
Open

根据你的案例我修改了下 #7

tangbincheng opened this issue Sep 1, 2021 · 0 comments

Comments

@tangbincheng
Copy link

tangbincheng commented Sep 1, 2021

`import 'dart:io';

var previewServerPort = 2227;

bool isHiddenFile(FileSystemEntity file) =>
file.path[file.parent.path.length + 1] == '.';

void main() async {
bool working = false;
var pubSpec = File('pubspec.yaml');
var pubLines = pubSpec.readAsLinesSync();
var newLines = [];
var varNames = [];
var resource = [];
for (var line in pubLines) {
if (line.contains('begin') &&
line.contains('#') &&
line.contains('assets')) {
working = true;
newLines.add(line);
}
if (line.contains('end') && line.contains('#') && line.contains('assets'))
working = false;

if (working) {
  if (line.trim().startsWith('#') && line.trim().endsWith('*')) {
    newLines.add(line);
    var directory =
        Directory(line.replaceAll('#', '').replaceAll('*', '').trim());
    if (directory.existsSync()) {
      var list = directory.listSync(recursive: true)
        ..sort((a, b) => a.path.compareTo(b.path));
      for (var file in list) {
        if (file.statSync().type == FileSystemEntityType.file &&
            !isHiddenFile(file)) {
          var path = file.path.replaceAll('\\', '/');
          var data = path.split('.');
          if (data.isNotEmpty) {
            var varName = data[0]
                .replaceAll('images/', '')
                .replaceAll('assets/', '')
                .toLowerCase()
                .trim();
            varName = varName.replaceAll('/', '_').replaceAll('.', '_');
            var pos = 0;
            String char;
            while (pos < varName.lastIndexOf('_')) {
              pos = varName.indexOf('_', pos);
              if (pos == -1) break;
              char = varName.substring(pos + 1, pos + 2);
              varName =
                  varName.replaceFirst('_$char', '_${char.toUpperCase()}');
              pos++;
            }
            varName = varName.replaceAll('_', '');
            resource
                .add("/// ![](http://127.0.0.1:$previewServerPort/$path)");
            resource.add("static const String $varName = '$path';");
            varNames.add("    $varName,");
            String newLinesData =
                '    - ${path.substring(0, path.lastIndexOf('/')+1)}';
            if (!newLines.contains(newLinesData)) {
              newLines.add(newLinesData);
            }
          }
        }
      }
    } else {
      throw FileSystemException('Directory wrong');
    }
  }
} else {
  newLines.add(line);
}

}

var r = File('lib/r.dart');
if (r.existsSync()) {
r.deleteSync();
}
r.createSync();
var content = 'class R {\n';
for (var line in resource) {
content = '$content $line\n';
}
content = '$content\n static const values = [\n';
for (var line in varNames) {
content = '$content $line\n';
}
content = '$content ];\n}\n';
r.writeAsStringSync(content);

var spec = '';
for (var line in newLines) {
spec = '$spec$line\n';
}
pubSpec.writeAsStringSync(spec);

var ser;
try {
ser = await HttpServer.bind('127.0.0.1', previewServerPort);
print('成功启动图片预览服务器于本机<$previewServerPort>端口');
ser.listen(
(req) {
var index = req.uri.path.lastIndexOf('.');
var subType = req.uri.path.substring(index + 1);
print(subType);
req.response
..headers.contentType = ContentType('image', subType)
..add(File('.${req.uri.path}').readAsBytesSync())
..close();
},
);
} catch (e) {
print('图片预览服务器已启动或端口被占用');
}
}`
改完的效果如下

微信截图_20210901170325
微信截图_20210901170342

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant