evenement_component_widget.dart 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. import '/backend/api_requests/api_calls.dart';
  2. import '/evenement/evenement_horecagelegenheid/evenement_horecagelegenheid_widget.dart';
  3. import '/flutter_flow/flutter_flow_theme.dart';
  4. import '/flutter_flow/flutter_flow_util.dart';
  5. import '/flutter_flow/flutter_flow_widgets.dart';
  6. import 'dart:ui';
  7. import '/custom_code/widgets/index.dart' as custom_widgets;
  8. import 'package:carousel_slider/carousel_slider.dart';
  9. import 'package:cached_network_image/cached_network_image.dart';
  10. import 'package:flutter/material.dart';
  11. import 'package:flutter_spinkit/flutter_spinkit.dart';
  12. import 'package:google_fonts/google_fonts.dart';
  13. import 'package:provider/provider.dart';
  14. import 'evenement_component_model.dart';
  15. export 'evenement_component_model.dart';
  16. class EvenementComponentWidget extends StatefulWidget {
  17. const EvenementComponentWidget({
  18. super.key,
  19. this.nid,
  20. });
  21. final String? nid;
  22. @override
  23. State<EvenementComponentWidget> createState() =>
  24. _EvenementComponentWidgetState();
  25. }
  26. class _EvenementComponentWidgetState extends State<EvenementComponentWidget>
  27. with RouteAware {
  28. late EvenementComponentModel _model;
  29. @override
  30. void setState(VoidCallback callback) {
  31. super.setState(callback);
  32. _model.onUpdate();
  33. }
  34. @override
  35. void initState() {
  36. super.initState();
  37. _model = createModel(context, () => EvenementComponentModel());
  38. }
  39. @override
  40. void dispose() {
  41. routeObserver.unsubscribe(this);
  42. _model.maybeDispose();
  43. super.dispose();
  44. }
  45. @override
  46. void didUpdateWidget(EvenementComponentWidget oldWidget) {
  47. super.didUpdateWidget(oldWidget);
  48. _model.widget = widget;
  49. }
  50. @override
  51. void didChangeDependencies() {
  52. super.didChangeDependencies();
  53. final route = DebugModalRoute.of(context);
  54. if (route != null) {
  55. routeObserver.subscribe(this, route);
  56. }
  57. debugLogGlobalProperty(context);
  58. }
  59. @override
  60. void didPopNext() {
  61. if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
  62. setState(() => _model.isRouteVisible = true);
  63. debugLogWidgetClass(_model);
  64. }
  65. }
  66. @override
  67. void didPush() {
  68. if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
  69. setState(() => _model.isRouteVisible = true);
  70. debugLogWidgetClass(_model);
  71. }
  72. }
  73. @override
  74. void didPop() {
  75. _model.isRouteVisible = false;
  76. }
  77. @override
  78. void didPushNext() {
  79. _model.isRouteVisible = false;
  80. }
  81. @override
  82. Widget build(BuildContext context) {
  83. DebugFlutterFlowModelContext.maybeOf(context)
  84. ?.parentModelCallback
  85. ?.call(_model);
  86. return FutureBuilder<ApiCallResponse>(
  87. future: EvenementCall.call(
  88. nid: widget!.nid,
  89. ),
  90. builder: (context, snapshot) {
  91. // Customize what your widget looks like when it's loading.
  92. if (!snapshot.hasData) {
  93. return Center(
  94. child: SizedBox(
  95. width: 80.0,
  96. height: 80.0,
  97. child: SpinKitFadingCircle(
  98. color: FlutterFlowTheme.of(context).primary,
  99. size: 80.0,
  100. ),
  101. ),
  102. );
  103. }
  104. final columnEvenementResponse = snapshot.data!;
  105. _model.debugBackendQueries['EvenementCall_statusCode_Column_7p7qgpjv'] =
  106. debugSerializeParam(
  107. columnEvenementResponse.statusCode,
  108. ParamType.int,
  109. link:
  110. 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=EvenementComponent',
  111. name: 'int',
  112. nullable: false,
  113. );
  114. _model.debugBackendQueries[
  115. 'EvenementCall_responseBody_Column_7p7qgpjv'] = debugSerializeParam(
  116. columnEvenementResponse.bodyText,
  117. ParamType.String,
  118. link:
  119. 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=EvenementComponent',
  120. name: 'String',
  121. nullable: false,
  122. );
  123. debugLogWidgetClass(_model);
  124. return Column(
  125. mainAxisSize: MainAxisSize.min,
  126. children: [
  127. Expanded(
  128. child: Builder(
  129. builder: (context) {
  130. final fotoos = EvenementCall.eventFotoos(
  131. columnEvenementResponse.jsonBody,
  132. )?.toList() ??
  133. [];
  134. if (fotoos.isEmpty) {
  135. return Image.asset(
  136. 'assets/images/logo800px.png',
  137. );
  138. }
  139. _model.debugGeneratorVariables[
  140. 'fotoos${fotoos.length > 100 ? ' (first 100)' : ''}'] =
  141. debugSerializeParam(
  142. fotoos.take(100),
  143. ParamType.String,
  144. isList: true,
  145. link:
  146. 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=EvenementComponent',
  147. name: 'String',
  148. nullable: false,
  149. );
  150. debugLogWidgetClass(_model);
  151. return Container(
  152. width: double.infinity,
  153. height: 200.0,
  154. child: CarouselSlider.builder(
  155. itemCount: fotoos.length,
  156. itemBuilder: (context, fotoosIndex, _) {
  157. final fotoosItem = fotoos[fotoosIndex];
  158. return Builder(
  159. builder: (context) {
  160. if (fotoosItem != '') {
  161. return ClipRRect(
  162. borderRadius: BorderRadius.circular(8.0),
  163. child: CachedNetworkImage(
  164. fadeInDuration: Duration(milliseconds: 500),
  165. fadeOutDuration: Duration(milliseconds: 500),
  166. imageUrl: fotoosItem,
  167. width: 200.0,
  168. height: 200.0,
  169. fit: BoxFit.cover,
  170. ),
  171. );
  172. } else {
  173. return Icon(
  174. Icons.image_not_supported,
  175. color: FlutterFlowTheme.of(context).primaryText,
  176. size: 24.0,
  177. );
  178. }
  179. },
  180. );
  181. },
  182. carouselController: _model.carouselController ??=
  183. CarouselSliderController(),
  184. options: CarouselOptions(
  185. initialPage: max(0, min(1, fotoos.length - 1)),
  186. viewportFraction: 0.5,
  187. disableCenter: true,
  188. enlargeCenterPage: true,
  189. enlargeFactor: 0.25,
  190. enableInfiniteScroll: true,
  191. scrollDirection: Axis.horizontal,
  192. autoPlay: false,
  193. onPageChanged: (index, _) =>
  194. _model.carouselCurrentIndex = index,
  195. ),
  196. ),
  197. );
  198. },
  199. ),
  200. ),
  201. Text(
  202. valueOrDefault<String>(
  203. getJsonField(
  204. columnEvenementResponse.jsonBody,
  205. r'''$[0].title''',
  206. )?.toString(),
  207. 'title',
  208. ),
  209. style: FlutterFlowTheme.of(context).headlineLarge.override(
  210. font: GoogleFonts.roboto(
  211. fontWeight:
  212. FlutterFlowTheme.of(context).headlineLarge.fontWeight,
  213. fontStyle:
  214. FlutterFlowTheme.of(context).headlineLarge.fontStyle,
  215. ),
  216. letterSpacing: 0.0,
  217. fontWeight:
  218. FlutterFlowTheme.of(context).headlineLarge.fontWeight,
  219. fontStyle:
  220. FlutterFlowTheme.of(context).headlineLarge.fontStyle,
  221. ),
  222. ),
  223. Text(
  224. valueOrDefault<String>(
  225. EvenementCall.eventDate(
  226. columnEvenementResponse.jsonBody,
  227. ),
  228. 'eventDate',
  229. ),
  230. style: FlutterFlowTheme.of(context).bodyMedium.override(
  231. font: GoogleFonts.roboto(
  232. fontWeight:
  233. FlutterFlowTheme.of(context).bodyMedium.fontWeight,
  234. fontStyle:
  235. FlutterFlowTheme.of(context).bodyMedium.fontStyle,
  236. ),
  237. letterSpacing: 0.0,
  238. fontWeight:
  239. FlutterFlowTheme.of(context).bodyMedium.fontWeight,
  240. fontStyle:
  241. FlutterFlowTheme.of(context).bodyMedium.fontStyle,
  242. ),
  243. ),
  244. Builder(
  245. builder: (context) {
  246. final categories = EvenementCall.eventCategorie(
  247. columnEvenementResponse.jsonBody,
  248. )?.toList() ??
  249. [];
  250. _model.debugGeneratorVariables[
  251. 'categories${categories.length > 100 ? ' (first 100)' : ''}'] =
  252. debugSerializeParam(
  253. categories.take(100),
  254. ParamType.String,
  255. isList: true,
  256. link:
  257. 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=EvenementComponent',
  258. name: 'String',
  259. nullable: false,
  260. );
  261. debugLogWidgetClass(_model);
  262. return Row(
  263. mainAxisSize: MainAxisSize.max,
  264. children: List.generate(categories.length, (categoriesIndex) {
  265. final categoriesItem = categories[categoriesIndex];
  266. return Padding(
  267. padding:
  268. EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 8.0, 0.0),
  269. child: Text(
  270. categoriesItem,
  271. style: FlutterFlowTheme.of(context).bodyMedium.override(
  272. font: GoogleFonts.roboto(
  273. fontWeight: FlutterFlowTheme.of(context)
  274. .bodyMedium
  275. .fontWeight,
  276. fontStyle: FlutterFlowTheme.of(context)
  277. .bodyMedium
  278. .fontStyle,
  279. ),
  280. letterSpacing: 0.0,
  281. fontWeight: FlutterFlowTheme.of(context)
  282. .bodyMedium
  283. .fontWeight,
  284. fontStyle: FlutterFlowTheme.of(context)
  285. .bodyMedium
  286. .fontStyle,
  287. ),
  288. ),
  289. );
  290. }),
  291. );
  292. },
  293. ),
  294. Column(
  295. mainAxisSize: MainAxisSize.max,
  296. children: [
  297. Text(
  298. valueOrDefault<String>(
  299. EvenementCall.eventAdres(
  300. columnEvenementResponse.jsonBody,
  301. ),
  302. 'adres',
  303. ),
  304. style: FlutterFlowTheme.of(context).bodyMedium.override(
  305. font: GoogleFonts.roboto(
  306. fontWeight: FlutterFlowTheme.of(context)
  307. .bodyMedium
  308. .fontWeight,
  309. fontStyle:
  310. FlutterFlowTheme.of(context).bodyMedium.fontStyle,
  311. ),
  312. letterSpacing: 0.0,
  313. fontWeight:
  314. FlutterFlowTheme.of(context).bodyMedium.fontWeight,
  315. fontStyle:
  316. FlutterFlowTheme.of(context).bodyMedium.fontStyle,
  317. ),
  318. ),
  319. Text(
  320. valueOrDefault<String>(
  321. EvenementCall.eventPlaats(
  322. columnEvenementResponse.jsonBody,
  323. ),
  324. 'plaats',
  325. ),
  326. style: FlutterFlowTheme.of(context).bodyMedium.override(
  327. font: GoogleFonts.roboto(
  328. fontWeight: FlutterFlowTheme.of(context)
  329. .bodyMedium
  330. .fontWeight,
  331. fontStyle:
  332. FlutterFlowTheme.of(context).bodyMedium.fontStyle,
  333. ),
  334. letterSpacing: 0.0,
  335. fontWeight:
  336. FlutterFlowTheme.of(context).bodyMedium.fontWeight,
  337. fontStyle:
  338. FlutterFlowTheme.of(context).bodyMedium.fontStyle,
  339. ),
  340. ),
  341. Row(
  342. mainAxisSize: MainAxisSize.max,
  343. children: [
  344. Text(
  345. FFLocalizations.of(context).getText(
  346. 'nghx1743' /* entreetoelichting */,
  347. ),
  348. style: FlutterFlowTheme.of(context).bodyMedium.override(
  349. font: GoogleFonts.roboto(
  350. fontWeight: FlutterFlowTheme.of(context)
  351. .bodyMedium
  352. .fontWeight,
  353. fontStyle: FlutterFlowTheme.of(context)
  354. .bodyMedium
  355. .fontStyle,
  356. ),
  357. letterSpacing: 0.0,
  358. fontWeight: FlutterFlowTheme.of(context)
  359. .bodyMedium
  360. .fontWeight,
  361. fontStyle: FlutterFlowTheme.of(context)
  362. .bodyMedium
  363. .fontStyle,
  364. ),
  365. ),
  366. Text(
  367. FFLocalizations.of(context).getText(
  368. 'y02m0qh0' /* 15 euro */,
  369. ),
  370. style: FlutterFlowTheme.of(context).bodyMedium.override(
  371. font: GoogleFonts.roboto(
  372. fontWeight: FlutterFlowTheme.of(context)
  373. .bodyMedium
  374. .fontWeight,
  375. fontStyle: FlutterFlowTheme.of(context)
  376. .bodyMedium
  377. .fontStyle,
  378. ),
  379. letterSpacing: 0.0,
  380. fontWeight: FlutterFlowTheme.of(context)
  381. .bodyMedium
  382. .fontWeight,
  383. fontStyle: FlutterFlowTheme.of(context)
  384. .bodyMedium
  385. .fontStyle,
  386. ),
  387. ),
  388. if (EvenementCall.eventWebsiteg(
  389. columnEvenementResponse.jsonBody,
  390. ) !=
  391. null &&
  392. EvenementCall.eventWebsiteg(
  393. columnEvenementResponse.jsonBody,
  394. ) !=
  395. '')
  396. InkWell(
  397. splashColor: Colors.transparent,
  398. focusColor: Colors.transparent,
  399. hoverColor: Colors.transparent,
  400. highlightColor: Colors.transparent,
  401. onTap: () async {
  402. await launchURL(EvenementCall.eventWebsiteg(
  403. columnEvenementResponse.jsonBody,
  404. )!);
  405. },
  406. child: Text(
  407. valueOrDefault<String>(
  408. EvenementCall.eventWebsiteg(
  409. columnEvenementResponse.jsonBody,
  410. ),
  411. 'website',
  412. ),
  413. style:
  414. FlutterFlowTheme.of(context).bodyMedium.override(
  415. font: GoogleFonts.roboto(
  416. fontWeight: FlutterFlowTheme.of(context)
  417. .bodyMedium
  418. .fontWeight,
  419. fontStyle: FlutterFlowTheme.of(context)
  420. .bodyMedium
  421. .fontStyle,
  422. ),
  423. letterSpacing: 0.0,
  424. fontWeight: FlutterFlowTheme.of(context)
  425. .bodyMedium
  426. .fontWeight,
  427. fontStyle: FlutterFlowTheme.of(context)
  428. .bodyMedium
  429. .fontStyle,
  430. ),
  431. ),
  432. ),
  433. Text(
  434. FFLocalizations.of(context).getText(
  435. 'lrjms1by' /* Hello World Contactveld */,
  436. ),
  437. style: FlutterFlowTheme.of(context).bodyMedium.override(
  438. font: GoogleFonts.roboto(
  439. fontWeight: FlutterFlowTheme.of(context)
  440. .bodyMedium
  441. .fontWeight,
  442. fontStyle: FlutterFlowTheme.of(context)
  443. .bodyMedium
  444. .fontStyle,
  445. ),
  446. letterSpacing: 0.0,
  447. fontWeight: FlutterFlowTheme.of(context)
  448. .bodyMedium
  449. .fontWeight,
  450. fontStyle: FlutterFlowTheme.of(context)
  451. .bodyMedium
  452. .fontStyle,
  453. ),
  454. ),
  455. ],
  456. ),
  457. Wrap(
  458. spacing: 0.0,
  459. runSpacing: 0.0,
  460. alignment: WrapAlignment.start,
  461. crossAxisAlignment: WrapCrossAlignment.start,
  462. direction: Axis.horizontal,
  463. runAlignment: WrapAlignment.start,
  464. verticalDirection: VerticalDirection.down,
  465. clipBehavior: Clip.none,
  466. children: [
  467. Builder(
  468. builder: (context) {
  469. if (getJsonField(
  470. columnEvenementResponse.jsonBody,
  471. r'''$[0].logo''',
  472. ) !=
  473. null) {
  474. return ClipRRect(
  475. borderRadius: BorderRadius.circular(8.0),
  476. child: CachedNetworkImage(
  477. fadeInDuration: Duration(milliseconds: 500),
  478. fadeOutDuration: Duration(milliseconds: 500),
  479. imageUrl: EvenementCall.eventLogog(
  480. columnEvenementResponse.jsonBody,
  481. )!,
  482. width: 40.0,
  483. height: 40.0,
  484. fit: BoxFit.cover,
  485. ),
  486. );
  487. } else {
  488. return Icon(
  489. Icons.image_not_supported,
  490. color: FlutterFlowTheme.of(context).primaryText,
  491. size: 24.0,
  492. );
  493. }
  494. },
  495. ),
  496. Container(
  497. width: MediaQuery.sizeOf(context).width * 0.4,
  498. height: MediaQuery.sizeOf(context).height * 0.4,
  499. child: custom_widgets.FromHTML(
  500. width: MediaQuery.sizeOf(context).width * 0.4,
  501. height: MediaQuery.sizeOf(context).height * 0.4,
  502. HTMLParameter: EvenementCall.eventBody(
  503. columnEvenementResponse.jsonBody,
  504. )!,
  505. ),
  506. ),
  507. ],
  508. ),
  509. ],
  510. ),
  511. Expanded(
  512. child: wrapWithModel(
  513. model: _model.evenementHorecagelegenheidModel,
  514. updateCallback: () => safeSetState(() {}),
  515. child: Builder(builder: (_) {
  516. return DebugFlutterFlowModelContext(
  517. rootModel: _model.rootModel,
  518. child: EvenementHorecagelegenheidWidget(
  519. establishmentID: widget!.nid!,
  520. ),
  521. );
  522. }),
  523. ),
  524. ),
  525. ],
  526. );
  527. },
  528. );
  529. }
  530. }