lidoofp_page.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import 'package:tp5/fltinfo/widget/w_cadre.dart';
  4. import 'package:tp5/lido/lido_api.dart';
  5. import 'package:tp5/lido/model/Lidoapi_ofp.dart';
  6. class LidoofpPage extends ConsumerStatefulWidget {
  7. const LidoofpPage({super.key, required this.params});
  8. final LidoofpPageParams params;
  9. @override
  10. LidoofpPageState createState() => LidoofpPageState();
  11. }
  12. class LidoofpPageState extends ConsumerState<LidoofpPage> {
  13. @override
  14. void initState() {
  15. super.initState();
  16. }
  17. Map<String, dynamic> ofpcat = {};
  18. Map<String, String> ofpcattype = {};
  19. String? _getCatName(String? cat) {
  20. var json = widget.params.lidoofp?.categoriesNames?.toJson() ?? {};
  21. json.addAll({
  22. "WXSIGWX": "Significant WX",
  23. "CREWINFO": "Crew Information",
  24. "IWFR": "Weather",
  25. "NOTAM": "NOTAM",
  26. "ATS": "ATC Flight Plan",
  27. "DISP": "Dispatch Information",
  28. "VERTPROF": "Vertical Profile",
  29. "DMS": "Additional Docs",
  30. "ABD": "Additional Briefing Documents",
  31. "UAD": "UAD Maps",
  32. "DISMAP": "Dispatcher Maps",
  33. "OFP": "OFP",
  34. "WXNOTAM": "WX/NOTAM",
  35. "ADDWXNOTAM": "WX/NOTAM",
  36. "WXSATWX": "Satellite WX",
  37. "RAIM": "RAIM"
  38. });
  39. if (json.containsKey(cat ?? "")) {
  40. return json[cat];
  41. }
  42. return null;
  43. }
  44. @override
  45. Widget build(BuildContext context) {
  46. final params = widget.params;
  47. // log(params.lidoofp?.briefingPackages.first.categories.map((e)=>e.name).toString() ?? "null",
  48. // name: "LidoofpPage");
  49. return Scaffold(
  50. appBar: AppBar(
  51. title: Text(params.title ??
  52. params.lidoofp?.briefingPackages.firstOrNull?.leg.first
  53. .legidentifier ??
  54. "---")),
  55. body: params.lidoofp == null
  56. ? const Text("No OFP found")
  57. : ListView(
  58. children: params.lidoofp?.categories
  59. .map((cat) => Padding(
  60. padding: const EdgeInsets.symmetric(
  61. vertical: 10, horizontal: 5),
  62. child: WCadre(
  63. title: "${_getCatName(cat.name) ?? {cat.name}}",
  64. child: InkWell(
  65. onTap: () async {
  66. final link =
  67. cat.documents.first.links?.self?.href ??
  68. cat.links?.self?.href ??
  69. "nolink";
  70. print(
  71. "lidoofppage: build: onTap: link: $link");
  72. final out = await ref
  73. .read(lidoapiProvider)
  74. .getDoc(link,
  75. mediaType:
  76. cat.documents.first.mediaType);
  77. setState(() {
  78. ofpcat[cat.name ?? "xxxx"] = out;
  79. ofpcattype[cat.name ?? "xxxx"] =
  80. cat.documents.first.mediaType ?? "";
  81. }); //print(out);
  82. },
  83. child: ofpcat.containsKey(cat.name ?? "xxx")
  84. ? Text(ofpcat[cat.name ?? "xxxx"]["data"]
  85. .toString())
  86. : const Text("Tap to load content...")
  87. // Text(
  88. // "${cat.name}: ${_getCatName(cat.name)}\n docs: ${cat.documents.first.mediaType} ${cat.documents.first.links?.self}\n link: ${cat.links?.self}")
  89. ))))
  90. .toList() ??
  91. [const Text("No categories found on OFP")]),
  92. );
  93. }
  94. }
  95. class LidoofpPageParams {
  96. const LidoofpPageParams({this.lidoofp, this.title});
  97. final String? title;
  98. final LidoapiOfp? lidoofp;
  99. }