generateStringRes method

Future<void> generateStringRes(
  1. BuildStep buildStep
)

Implementation

Future<void> generateStringRes(BuildStep buildStep) async {
  String output = '''
import 'dart:convert';
import 'dart:io';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:sprintf/sprintf.dart';

class StringRes {
StringRes._internal();

factory StringRes.getInstance() => _instance;

static late final StringRes _instance = StringRes._internal();

// the string resources absolute path for the target language
String? _targetStringResAbsolutePath;
// the string resources path for the target language, which is in assets
String _defaultStringResPath = "${buildStep.inputId.path}";

Map<dynamic, dynamic>? _targetStringRes;
Map<dynamic, dynamic>? _defaultStringRes;

Map<String, String> _supportLanguages = ${getSupportLanguage()};

Future<void> load({String? targetStringResAbsolutePath}) async {
  if (_defaultStringRes == null) {
    _defaultStringRes = await _loadStringResByAssets(_defaultStringResPath);
  }

  if (_targetStringRes == null || _targetStringResAbsolutePath != targetStringResAbsolutePath) {
    _targetStringResAbsolutePath = targetStringResAbsolutePath;
    _targetStringRes = await _loadStringResByAbsolutePath(absolutePath: _targetStringResAbsolutePath);
  }
}

dynamic _loadStringResByAssets(String? assetsPath) async {
  if (assetsPath == null) {
    return {};
  }

  try {
    final String jsonStr = await rootBundle.loadString(assetsPath);
    final dynamic ret = json.decode(jsonStr);
    return ret;
  } on Exception catch (e) {
    debugPrint("parse default string res failed, \${e.toString()}");
    return {};
  }
}

Future<dynamic> _loadStringResByAbsolutePath({String? absolutePath}) async {
  if (absolutePath == null) {
    final ret = await _loadStringResByAssets(_supportLanguages[window.locale.languageCode]);
    return ret;
  }

  final file = File(absolutePath);
  if (file.existsSync()) {
    try {
      final String jsonStr = await file.readAsString();
      final dynamic ret = json.decode(jsonStr);
      return ret;
    } on Exception catch (e) {
      debugPrint("parse target string res failed, \${e.toString()}");
      return {};
    }
  }
}

String _getString(String key, { List<dynamic>? params }) {
  final String? text = _targetStringRes?[key] ?? _defaultStringRes?[key];
  return text == null ? key : (params == null ? text : sprintf(text, params));
}

static String getString(String key, { List<dynamic>? params }) {
  return StringRes.getInstance()._getString(key, params: params);
}
}
  ''';
  final genFile = File(genCodeDir +
      stringResFileName +
      buildExtensions[buildStep.inputId.extension]!.first);
  final isExist = await genFile.exists();
  if (!isExist) {
    await genFile.create(recursive: true);
  }
  await genFile.writeAsString(output.toString());
}