- Need to use minimal Dart SDK version ^3.5.0
- Need to use minimal Flutter version 3.24.3
- Rename package from
common_module_flutter
toosam_common_module_flutter
- On pubspec.yaml, change
common_module_flutter
toosam_common_module_flutter
- On imports, change
import 'package:common_module_flutter/common_module_flutter.dart';
toimport 'package:osam_common_module_flutter/osam_common_module_flutter.dart';
- On pubspec.yaml, change
- To import, use only
import 'package:osam_common_module_flutter/osam_common_module_flutter.dart';
and not src/ or other subdirectories. - Need to use minimal Dart SDK version 3.0.0
- Need to use minimal Flutter version 3.10.0
Des de la OSAM es proporcionen mòduls per realitzar un conjunt de tasques comunes a totes les apps publicades per l'Ajuntament de Barcelona. El mòdul comú (Flutter) està disponible com a repositori a Github
Useful links:
- Lògica de negoci
- Backend (json)
- Modul comú requirements catalá o espanyol
A partir de la versió 3.0.0 la llibreria es un wrapper de la desenvolupada en Kotlin Multiplatform
-
Afegeix aquesta dependència al pubspec:
osam_common_module_flutter: git: url: https://github.com/AjuntamentdeBarcelona/modul_comu_osam_flutter.git ref: '6.0.0'
En cas que les dependències de Firebase Analytics, Firebase Performance i Firebase Crashlytics fallin, cal afegir aquestes aquesta configuració al pubspec:
dependency_overrides: firebase_crashlytics_platform_interface: 3.1.13 firebase_analytics_platform_interface: 3.0.5 firebase_performance_platform_interface: ^0.1.1+18
-
Actualitzar mitjançant el comandament 'flutter packages get' les dependències.
-
Afegir el import on sigui necessari:
import 'package:osam_common_module_flutter/osam_common_module_flutter.dart';
-
Per utilitzar la llibreria necessitem crear una instància de la clase OSAM, la qual es fa a través del mètode estàtic (i asíncron)
init()
.Tenim un example de inicialització on example/lib/di/di.dart
En el cas de l'app d'exemple, accedim a la instància creada a través de OsamRepository
En l'exemple anterior tenim la URL del mòdul comú hardcoded a la pròpia lògica. Però aquesta URL s'ha d'externalitzar com a variable de configuració, d'aquesta manera es pot generar la versió de producció només substituint el fitxer amb els valors correctes.
Per fer-ho només cal crear el fitxer ".env" a l'arrel del projecte de Flutter i carregar aquest fitxer amb el plugin flutter_dotenv. En aquesta URL hi ha la documentació de com afegir aquest fitxer i com carregar les dades al codi
El fitxer ".env" ha de contenir la URL del mòdul comú en la variable "COMMON_MODULE_URL". Quedaria de la següent manera:
COMMON_MODULE_URL=https://dev-osam-modul-comu.dtibcn.cat/
S'ha d'utilitzar, com a mínim, la versió 1.6.10 de Kotlin.
L'atribut compileSdkVersion
del fitxer build.gradle de l'aplicació d'Android ha de tenir el valor
31 o superior.
Si la versió mínima de Android a la que es dona suport (minSdkVersion
) a l'aplicació d'Android es inferior a 21, serà necessari habilitar multidex, ja que, si no, apareixerà un error al compilar.
Si volem que els pop-ups es vegin amb l'estil correcte, haurem d'utilitzar un estil que extengui d' AppCompat. A l'aplicació de Android que crea Flutter s'hauria de modificar els fitxers styles.xml
En el Podfile del projecte d'iOS creat por Flutter haurem d'incloure el pod del mòdul comú de Kotlin Multiplatform Mobile. Això es fa incloent la següent linea:
pod 'OSAMCommon', :git => 'https://github.com/AjuntamentdeBarcelona/modul_comu_osam.git', :tag => '2.1.7'
El Podfile quedaria de la següent manera
Per crear el missatge d'alerta, únicament hem de cridar a la funció que descarregarà el json amb les variables ja definides i mostrarà l'alerta segons els valors rebuts. Exemple:
void _onVersionControl() async {
final result = await DI.osamSdk.versionControl(
language: Language.CA,
);
switch (result) {
case VersionControlResponse.ACCEPTED:
break;
case VersionControlResponse.DISMISSED:
break;
case VersionControlResponse.CANCELLED:
break;
case VersionControlResponse.ERROR:
break;
}
}
No és necessari capturar la resposta si no es necessita realitzar cap acció adicional, ja que el mòdul comú s'encarregarà de mostrar el popup si es compleixen els requeriments per a que es mostri
Si és necessari executar el control de versions cada vegada que l'app torna a primer pla, a l'app demo hem implementat aquesta funcionalitat en un mixin anomenat OsamVersionChecker:
class _MyHomePageState extends State<MyHomePage> with OsamVersionChecker {
Hem utilitzat el package flutter_fgbg:
mixin OsamVersionChecker<T extends StatefulWidget> on State<T> implements RouteAware {
StreamSubscription<FGBGType> subscription;
@override
void initState() {
super.initState();
subscription = FGBGEvents.stream.listen((event) async {
if (event.toString() == "FGBGType.foreground") {
await DI.osamRepository.checkForUpdates(context);
}
});
}
}
Per crear el missatge d'alerta, únicament hem de cridar a la funció que descarregarà el json amb les variables ja definides i mostrarà l'alerta segons els valors rebuts. Exemple:
void _onRating() async {
final result = await DI.osamSdk.rating(
language: Language.EN,
);
switch (result) {
case RatingControlResponse.ACCEPTED:
break;
case RatingControlResponse.DISMISSED:
break;
case RatingControlResponse.CANCELLED:
break;
}
}
No és necessari capturar la resposta si no es necessita realitzar cap acció adicional, ja que el mòdul comú s'encarregarà de mostrar el popup si es compleixen els requeriments per a que es mostri
Per obtenir la informació del dispositiu i de l'aplicació Exemple:
void _onDeviceInformation(BuildContext context) async {
final result = await DI.osamRepository.deviceInformation();
_showToast(context, "${result.platformName}");
_showToast(context, "${result.platformVersion}");
_showToast(context, "${result.platformModel}");
}
void _onAppInformation(BuildContext context) async {
final result = await DI.osamRepository.appInformation();
_showToast(context, "${result.appName}");
_showToast(context, "${result.appVersionName}");
_showToast(context, "${result.appVersionCode}");
}