我创建了一个自定义语言服务来促进我的 Flutter 应用程序中的本地化。
这些是文件:
文件 1:language_service.dart
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:injectable/injectable.dart';
import 'package:stacked/stacked.dart';
import 'language_type.dart';
import 'models/app_strings.dart';
@singleton
class LanguageService extends BaseViewModel {
late LanguageType _currentLanguage;
late AppStrings _appStrings;
LanguageType? get currentLanguage => _currentLanguage;
AppStrings get strings => _appStrings;
Future<void> switchLanguage(LanguageType languageType) async {
_currentLanguage = languageType;
var parsedJson = await getJsonFromLanguage(languageType.toString());
_appStrings = AppStrings.fromJson(parsedJson);
notifyListeners();
}
Future<Map<String, dynamic>> getJsonFromLanguage(String language) async {
String jsonString = await rootBundle
.loadString('lib/localization/languages/$language.json');
return json.decode(jsonString);
}
}
文件 2:app_strings.dart
import 'home_page_strings.dart';
class AppStrings {
final HomePageStrings homePage;
AppStrings.fromJson(Map<String, dynamic> parsedJson)
: homePage = HomePageStrings.fromJson(
parsedJson['HomePageStrings'],
);
}
文件 3:home_page_strings.dart
class HomePageStrings {
final String title;
HomePageStrings({required this.title});
HomePageStrings.fromJson(Map<String, dynamic> json) : title = json['title'];
}
文件 4:language_type.dart
class LanguageTypes {
static LanguageType english = LanguageType("en");
static LanguageType nepali = LanguageType("np");
}
class LanguageType {
static List<String> supportedLanguages = ['en', 'np'];
static String defaultLanguage = 'en';
String language;
LanguageType(this.language) : assert(supportedLanguages.contains(language));
@override
String toString() {
return language;
}
}
我需要测试 language_service 但它依赖于 rootBundle。如何使用 Mockito 在 Flutter 2 中对此进行测试?