Line data Source code
1 : import 'package:code_builder/code_builder.dart';
2 : import 'package:flutter_navigation_generator/src/models/importable_type.dart';
3 : import 'package:flutter_navigation_generator/src/models/route_config.dart';
4 : import 'package:flutter_navigation_generator/src/utils/utils.dart';
5 :
6 : class ImportBuilder {
7 : final Set<RouteConfig> routes;
8 : final Uri? targetFile;
9 : final ImportableType? pageType;
10 : final List<ImportableType> defaultGuards;
11 :
12 1 : ImportBuilder({
13 : required this.routes,
14 : this.targetFile,
15 : this.pageType,
16 : this.defaultGuards = const [],
17 : });
18 :
19 1 : Iterable<Directive> generate() {
20 : final imports = <String?>{
21 1 : 'package:flutter/material.dart',
22 1 : 'dart:convert',
23 5 : if (routes.any((route) => route.guards?.isNotEmpty == true) ||
24 2 : defaultGuards.isNotEmpty)
25 0 : 'package:flutter_navigation_generator_annotations/flutter_navigation_generator_annotations.dart',
26 : };
27 5 : imports.add(typeRefer(pageType, targetFile: targetFile).url);
28 1 : imports.addAll(
29 2 : defaultGuards.map((e) => typeRefer(e, targetFile: targetFile).url));
30 3 : imports.addAll(routes.expand(
31 2 : (route) => [
32 4 : typeRefer(route.routeWidget, targetFile: targetFile).url,
33 4 : typeRefer(route.pageType, targetFile: targetFile).url,
34 4 : typeRefer(route.returnType, targetFile: targetFile).url,
35 4 : ...route.parameters.expand((e) => [
36 3 : typeRefer(e, targetFile: targetFile).url,
37 1 : ...e.typeArguments
38 1 : .map((e) => typeRefer(e, targetFile: targetFile).url),
39 : ]),
40 1 : ...?route.guards?.map((e) => typeRefer(e, targetFile: targetFile).url),
41 : ],
42 : ));
43 2 : return imports.whereType<String>().map(Directive.import);
44 : }
45 : }
|