33// Use of this source code is governed by a BSD-style license that can be
44// found in the LICENSE file.
55
6+ import 'dart:convert' ;
7+
68import 'package:analyzer/dart/analysis/analysis_context.dart' ;
79import 'package:analyzer/dart/analysis/analysis_context_collection.dart' ;
810import 'package:analyzer/dart/analysis/results.dart' ;
@@ -25,6 +27,7 @@ import 'package:flutter_tools/src/runner/flutter_command.dart';
2527import 'package:package_config/package_config.dart' ;
2628import 'package:yaml/yaml.dart' ;
2729
30+ import 'tizen_cache.dart' ;
2831import 'tizen_project.dart' ;
2932import 'tizen_sdk.dart' ;
3033
@@ -367,6 +370,7 @@ Future<void> injectTizenPlugins(FlutterProject project) async {
367370 await findTizenPlugins (project, cppOnly: true );
368371 final List <TizenPlugin > dotnetPlugins =
369372 await findTizenPlugins (project, dotnetOnly: true );
373+ await _writeAppDepndencyInfo (project);
370374 await _writeTizenPluginRegistrant (tizenProject, cppPlugins, dotnetPlugins);
371375 if (tizenProject.isDotnet) {
372376 await _writeIntermediateDotnetFiles (tizenProject, dotnetPlugins);
@@ -629,3 +633,82 @@ Future<void> renderTemplateToFile(
629633 await file.create (recursive: true );
630634 await file.writeAsString (renderedTemplate);
631635}
636+
637+ /// See: [_writeFlutterPluginsList] in flutter_plugins.dart
638+ Future <void > _writeAppDepndencyInfo (
639+ FlutterProject project,
640+ ) async {
641+ YamlMap ? packagesFromPubspecLock () {
642+ final File pubspec = project.directory.childFile ('pubspec.lock' );
643+ if (! pubspec.existsSync ()) {
644+ return null ;
645+ }
646+
647+ Object ? contents;
648+ try {
649+ contents = loadYaml (pubspec.readAsStringSync ());
650+ } on YamlException catch (err) {
651+ globals.printTrace ('Failed to parse packages from pubspec.lock: $err ' );
652+ }
653+ if (contents == null || contents is ! YamlMap ) {
654+ return null ;
655+ }
656+ final Object ? packages = contents['packages' ];
657+ if (packages == null || packages is ! YamlMap ) {
658+ return null ;
659+ }
660+ return packages;
661+ }
662+
663+ final TizenProject tizenProject = TizenProject .fromFlutter (project);
664+ final File appDepsJson = tizenProject.hostAppRoot.childFile ('.app.deps.json' );
665+ final List <TizenPlugin > plugins = await findTizenPlugins (project);
666+ final List <Map <String , Object >> pluginInfo = < Map <String , Object >> [];
667+ final YamlMap ? packages = packagesFromPubspecLock ();
668+ for (final TizenPlugin plugin in plugins) {
669+ String version = '' ;
670+ if (packages != null && packages.containsKey (plugin.name)) {
671+ final YamlMap package = packages[plugin.name] as YamlMap ;
672+ if (package.containsKey ('version' )) {
673+ version = package['version' ] as String ;
674+ }
675+ }
676+ pluginInfo.add (< String , Object > {
677+ 'name' : plugin.name,
678+ 'version' : version,
679+ });
680+ }
681+
682+ final Map <String , Object ?> result = < String , Object > {};
683+ result['info' ] =
684+ 'This is a generated file; do not edit or check into version control.' ;
685+ result['plugins' ] = pluginInfo;
686+ final Map <String , Object > dart = < String , Object > {};
687+ dart['version' ] = globals.flutterVersion.dartSdkVersion;
688+
689+ final Map <String , Object > flutter = < String , Object > {};
690+ flutter['version' ] = globals.flutterVersion.frameworkVersion;
691+
692+ final Map <String , Object > flutterTizen = < String , Object > {};
693+ flutterTizen['revision' ] = globals.flutterVersion.frameworkRevisionShort;
694+
695+ final Map <String , Object > engine = < String , Object > {};
696+ engine['revision' ] = globals.flutterVersion.engineRevisionShort;
697+
698+ final Map <String , Object > embedder = < String , Object > {};
699+ final String revision =
700+ globals.cache.getStampFor (kTizenEmbedderStampName) ?? '' ;
701+ embedder['revision' ] =
702+ revision.length > 10 ? revision.substring (0 , 10 ) : revision;
703+
704+ result['dart' ] = dart;
705+ result['flutter' ] = flutter;
706+ result['flutter-tizen' ] = flutterTizen;
707+ result['engine' ] = engine;
708+ result['embedder' ] = embedder;
709+ result['date_created' ] = globals.systemClock.now ().toString ();
710+
711+ const JsonEncoder encoder = JsonEncoder .withIndent (' ' );
712+ final String formattedJsonString = encoder.convert (result);
713+ appDepsJson.writeAsStringSync (formattedJsonString);
714+ }
0 commit comments