login_widget.dart 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. import '/components/header_buttons_component_widget.dart';
  2. import '/flutter_flow/flutter_flow_theme.dart';
  3. import '/flutter_flow/flutter_flow_util.dart';
  4. import '/flutter_flow/flutter_flow_widgets.dart';
  5. import '/shared/drawer_component/drawer_component_widget.dart';
  6. import 'dart:ui';
  7. import '/custom_code/actions/index.dart' as actions;
  8. import '/index.dart';
  9. import 'package:aligned_tooltip/aligned_tooltip.dart';
  10. import 'package:easy_debounce/easy_debounce.dart';
  11. import 'package:flutter/material.dart';
  12. import 'package:flutter/scheduler.dart';
  13. import 'package:flutter_spinkit/flutter_spinkit.dart';
  14. import 'package:google_fonts/google_fonts.dart';
  15. import 'package:provider/provider.dart';
  16. import 'login_model.dart';
  17. export 'login_model.dart';
  18. class LoginWidget extends StatefulWidget {
  19. const LoginWidget({super.key});
  20. static String routeName = 'login';
  21. static String routePath = '/login';
  22. @override
  23. State<LoginWidget> createState() => _LoginWidgetState();
  24. }
  25. class _LoginWidgetState extends State<LoginWidget> with RouteAware {
  26. late LoginModel _model;
  27. final scaffoldKey = GlobalKey<ScaffoldState>();
  28. @override
  29. void initState() {
  30. super.initState();
  31. _model = createModel(context, () => LoginModel());
  32. // On page load action.
  33. SchedulerBinding.instance.addPostFrameCallback((_) async {
  34. if (FFAppState().gemeenteSelectId == null ||
  35. FFAppState().gemeenteSelectId == '') {
  36. FFAppState().gemeenteSelectId = '28694';
  37. FFAppState().provincieSelectId = '28666';
  38. safeSetState(() {});
  39. }
  40. });
  41. _model.usernameFieldTextController ??=
  42. TextEditingController(text: FFAppState().laatsteGebruikersnaam)
  43. ..addListener(() {
  44. debugLogWidgetClass(_model);
  45. });
  46. _model.usernameFieldFocusNode ??= FocusNode();
  47. _model.passwordFieldTextController ??= TextEditingController()
  48. ..addListener(() {
  49. debugLogWidgetClass(_model);
  50. });
  51. _model.passwordFieldFocusNode ??= FocusNode();
  52. }
  53. @override
  54. void dispose() {
  55. routeObserver.unsubscribe(this);
  56. _model.dispose();
  57. super.dispose();
  58. }
  59. @override
  60. void didUpdateWidget(LoginWidget oldWidget) {
  61. super.didUpdateWidget(oldWidget);
  62. _model.widget = widget;
  63. }
  64. @override
  65. void didChangeDependencies() {
  66. super.didChangeDependencies();
  67. final route = DebugModalRoute.of(context);
  68. if (route != null) {
  69. routeObserver.subscribe(this, route);
  70. }
  71. debugLogGlobalProperty(context);
  72. }
  73. @override
  74. void didPopNext() {
  75. if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
  76. setState(() => _model.isRouteVisible = true);
  77. debugLogWidgetClass(_model);
  78. }
  79. }
  80. @override
  81. void didPush() {
  82. if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
  83. setState(() => _model.isRouteVisible = true);
  84. debugLogWidgetClass(_model);
  85. }
  86. }
  87. @override
  88. void didPop() {
  89. _model.isRouteVisible = false;
  90. }
  91. @override
  92. void didPushNext() {
  93. _model.isRouteVisible = false;
  94. }
  95. @override
  96. Widget build(BuildContext context) {
  97. DebugFlutterFlowModelContext.maybeOf(context)
  98. ?.parentModelCallback
  99. ?.call(_model);
  100. context.watch<FFAppState>();
  101. return GestureDetector(
  102. onTap: () {
  103. FocusScope.of(context).unfocus();
  104. FocusManager.instance.primaryFocus?.unfocus();
  105. },
  106. child: Scaffold(
  107. key: scaffoldKey,
  108. backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
  109. drawer: Drawer(
  110. elevation: 16.0,
  111. child: wrapWithModel(
  112. model: _model.drawerComponentModel,
  113. updateCallback: () => safeSetState(() {}),
  114. child: Builder(builder: (_) {
  115. return DebugFlutterFlowModelContext(
  116. rootModel: _model.rootModel,
  117. child: DrawerComponentWidget(),
  118. );
  119. }),
  120. ),
  121. ),
  122. appBar: PreferredSize(
  123. preferredSize: Size.fromHeight(80.0),
  124. child: AppBar(
  125. backgroundColor: FlutterFlowTheme.of(context).primaryText,
  126. iconTheme:
  127. IconThemeData(color: FlutterFlowTheme.of(context).secondary),
  128. automaticallyImplyLeading: false,
  129. actions: [],
  130. flexibleSpace: FlexibleSpaceBar(
  131. background: wrapWithModel(
  132. model: _model.headerButtonsComponentModel,
  133. updateCallback: () => safeSetState(() {}),
  134. child: Builder(builder: (_) {
  135. return DebugFlutterFlowModelContext(
  136. rootModel: _model.rootModel,
  137. child: HeaderButtonsComponentWidget(
  138. showBackButton: false,
  139. ),
  140. );
  141. }),
  142. ),
  143. centerTitle: true,
  144. expandedTitleScale: 1.0,
  145. ),
  146. bottom: PreferredSize(
  147. preferredSize: Size.fromHeight(70.0),
  148. child: Container(),
  149. ),
  150. toolbarHeight: MediaQuery.sizeOf(context).height * 0.25,
  151. elevation: 2.0,
  152. ),
  153. ),
  154. body: SafeArea(
  155. top: true,
  156. child: Align(
  157. alignment: AlignmentDirectional(0.0, -1.0),
  158. child: Column(
  159. mainAxisSize: MainAxisSize.max,
  160. crossAxisAlignment: CrossAxisAlignment.center,
  161. children: [
  162. Column(
  163. mainAxisSize: MainAxisSize.max,
  164. children: [
  165. Stack(
  166. children: [
  167. Padding(
  168. padding: EdgeInsetsDirectional.fromSTEB(
  169. 24.0, 0.0, 24.0, 0.0),
  170. child: Column(
  171. mainAxisSize: MainAxisSize.max,
  172. children: [
  173. AlignedTooltip(
  174. content: Padding(
  175. padding: EdgeInsets.all(4.0),
  176. child: Text(
  177. FFLocalizations.of(context).getText(
  178. 'pj545url' /* Veld wissen */,
  179. ),
  180. style: FlutterFlowTheme.of(context)
  181. .bodyLarge
  182. .override(
  183. font: GoogleFonts.roboto(
  184. fontWeight:
  185. FlutterFlowTheme.of(context)
  186. .bodyLarge
  187. .fontWeight,
  188. fontStyle:
  189. FlutterFlowTheme.of(context)
  190. .bodyLarge
  191. .fontStyle,
  192. ),
  193. letterSpacing: 0.0,
  194. fontWeight:
  195. FlutterFlowTheme.of(context)
  196. .bodyLarge
  197. .fontWeight,
  198. fontStyle:
  199. FlutterFlowTheme.of(context)
  200. .bodyLarge
  201. .fontStyle,
  202. ),
  203. ),
  204. ),
  205. offset: 4.0,
  206. preferredDirection: AxisDirection.down,
  207. borderRadius: BorderRadius.circular(8.0),
  208. backgroundColor: FlutterFlowTheme.of(context)
  209. .secondaryBackground,
  210. elevation: 4.0,
  211. tailBaseWidth: 24.0,
  212. tailLength: 12.0,
  213. waitDuration: Duration(milliseconds: 100),
  214. showDuration: Duration(milliseconds: 1500),
  215. triggerMode: TooltipTriggerMode.tap,
  216. child: Container(
  217. width: double.infinity,
  218. child: TextFormField(
  219. controller:
  220. _model.usernameFieldTextController,
  221. focusNode: _model.usernameFieldFocusNode,
  222. onChanged: (_) => EasyDebounce.debounce(
  223. '_model.usernameFieldTextController',
  224. Duration(milliseconds: 2000),
  225. () => safeSetState(() {}),
  226. ),
  227. autofocus: false,
  228. textInputAction: TextInputAction.next,
  229. obscureText: false,
  230. decoration: InputDecoration(
  231. isDense: true,
  232. labelStyle: FlutterFlowTheme.of(context)
  233. .labelMedium
  234. .override(
  235. font: GoogleFonts.roboto(
  236. fontWeight:
  237. FlutterFlowTheme.of(context)
  238. .labelMedium
  239. .fontWeight,
  240. fontStyle:
  241. FlutterFlowTheme.of(context)
  242. .labelMedium
  243. .fontStyle,
  244. ),
  245. letterSpacing: 0.0,
  246. fontWeight:
  247. FlutterFlowTheme.of(context)
  248. .labelMedium
  249. .fontWeight,
  250. fontStyle:
  251. FlutterFlowTheme.of(context)
  252. .labelMedium
  253. .fontStyle,
  254. ),
  255. hintText:
  256. FFLocalizations.of(context).getText(
  257. 'd507d3b9' /* E-mailadres */,
  258. ),
  259. hintStyle: FlutterFlowTheme.of(context)
  260. .labelMedium
  261. .override(
  262. font: GoogleFonts.roboto(
  263. fontWeight:
  264. FlutterFlowTheme.of(context)
  265. .labelMedium
  266. .fontWeight,
  267. fontStyle:
  268. FlutterFlowTheme.of(context)
  269. .labelMedium
  270. .fontStyle,
  271. ),
  272. letterSpacing: 0.0,
  273. fontWeight:
  274. FlutterFlowTheme.of(context)
  275. .labelMedium
  276. .fontWeight,
  277. fontStyle:
  278. FlutterFlowTheme.of(context)
  279. .labelMedium
  280. .fontStyle,
  281. ),
  282. enabledBorder: OutlineInputBorder(
  283. borderSide: BorderSide(
  284. color: Color(0x00000000),
  285. width: 1.0,
  286. ),
  287. borderRadius:
  288. BorderRadius.circular(8.0),
  289. ),
  290. focusedBorder: OutlineInputBorder(
  291. borderSide: BorderSide(
  292. color: Color(0x00000000),
  293. width: 1.0,
  294. ),
  295. borderRadius:
  296. BorderRadius.circular(8.0),
  297. ),
  298. errorBorder: OutlineInputBorder(
  299. borderSide: BorderSide(
  300. color: FlutterFlowTheme.of(context)
  301. .error,
  302. width: 1.0,
  303. ),
  304. borderRadius:
  305. BorderRadius.circular(8.0),
  306. ),
  307. focusedErrorBorder: OutlineInputBorder(
  308. borderSide: BorderSide(
  309. color: FlutterFlowTheme.of(context)
  310. .error,
  311. width: 1.0,
  312. ),
  313. borderRadius:
  314. BorderRadius.circular(8.0),
  315. ),
  316. filled: true,
  317. fillColor: FlutterFlowTheme.of(context)
  318. .secondaryBackground,
  319. suffixIcon: _model
  320. .usernameFieldTextController!
  321. .text
  322. .isNotEmpty
  323. ? InkWell(
  324. onTap: () async {
  325. _model
  326. .usernameFieldTextController
  327. ?.clear();
  328. safeSetState(() {});
  329. },
  330. child: Icon(
  331. Icons.clear,
  332. size: 24.0,
  333. ),
  334. )
  335. : null,
  336. ),
  337. style: FlutterFlowTheme.of(context)
  338. .bodyMedium
  339. .override(
  340. font: GoogleFonts.roboto(
  341. fontWeight:
  342. FlutterFlowTheme.of(context)
  343. .bodyMedium
  344. .fontWeight,
  345. fontStyle:
  346. FlutterFlowTheme.of(context)
  347. .bodyMedium
  348. .fontStyle,
  349. ),
  350. letterSpacing: 0.0,
  351. fontWeight:
  352. FlutterFlowTheme.of(context)
  353. .bodyMedium
  354. .fontWeight,
  355. fontStyle:
  356. FlutterFlowTheme.of(context)
  357. .bodyMedium
  358. .fontStyle,
  359. ),
  360. cursorColor: FlutterFlowTheme.of(context)
  361. .primaryText,
  362. enableInteractiveSelection: true,
  363. validator: _model
  364. .usernameFieldTextControllerValidator
  365. .asValidator(context),
  366. ),
  367. ),
  368. ),
  369. AlignedTooltip(
  370. content: Padding(
  371. padding: EdgeInsets.all(4.0),
  372. child: Text(
  373. FFLocalizations.of(context).getText(
  374. 'n3cyffso' /* Wachtwoord tonen/verbergen */,
  375. ),
  376. style: FlutterFlowTheme.of(context)
  377. .bodyLarge
  378. .override(
  379. font: GoogleFonts.roboto(
  380. fontWeight:
  381. FlutterFlowTheme.of(context)
  382. .bodyLarge
  383. .fontWeight,
  384. fontStyle:
  385. FlutterFlowTheme.of(context)
  386. .bodyLarge
  387. .fontStyle,
  388. ),
  389. letterSpacing: 0.0,
  390. fontWeight:
  391. FlutterFlowTheme.of(context)
  392. .bodyLarge
  393. .fontWeight,
  394. fontStyle:
  395. FlutterFlowTheme.of(context)
  396. .bodyLarge
  397. .fontStyle,
  398. ),
  399. ),
  400. ),
  401. offset: 4.0,
  402. preferredDirection: AxisDirection.down,
  403. borderRadius: BorderRadius.circular(8.0),
  404. backgroundColor: FlutterFlowTheme.of(context)
  405. .secondaryBackground,
  406. elevation: 4.0,
  407. tailBaseWidth: 24.0,
  408. tailLength: 12.0,
  409. waitDuration: Duration(milliseconds: 100),
  410. showDuration: Duration(milliseconds: 1500),
  411. triggerMode: TooltipTriggerMode.tap,
  412. child: Container(
  413. width: double.infinity,
  414. child: TextFormField(
  415. controller:
  416. _model.passwordFieldTextController,
  417. focusNode: _model.passwordFieldFocusNode,
  418. autofocus: false,
  419. textInputAction: TextInputAction.next,
  420. obscureText:
  421. !_model.passwordFieldVisibility,
  422. decoration: InputDecoration(
  423. isDense: true,
  424. labelStyle: FlutterFlowTheme.of(context)
  425. .labelMedium
  426. .override(
  427. font: GoogleFonts.roboto(
  428. fontWeight:
  429. FlutterFlowTheme.of(context)
  430. .labelMedium
  431. .fontWeight,
  432. fontStyle:
  433. FlutterFlowTheme.of(context)
  434. .labelMedium
  435. .fontStyle,
  436. ),
  437. letterSpacing: 0.0,
  438. fontWeight:
  439. FlutterFlowTheme.of(context)
  440. .labelMedium
  441. .fontWeight,
  442. fontStyle:
  443. FlutterFlowTheme.of(context)
  444. .labelMedium
  445. .fontStyle,
  446. ),
  447. hintText:
  448. FFLocalizations.of(context).getText(
  449. 't8h5f8ir' /* Wachtwoord */,
  450. ),
  451. hintStyle: FlutterFlowTheme.of(context)
  452. .labelMedium
  453. .override(
  454. font: GoogleFonts.roboto(
  455. fontWeight:
  456. FlutterFlowTheme.of(context)
  457. .labelMedium
  458. .fontWeight,
  459. fontStyle:
  460. FlutterFlowTheme.of(context)
  461. .labelMedium
  462. .fontStyle,
  463. ),
  464. letterSpacing: 0.0,
  465. fontWeight:
  466. FlutterFlowTheme.of(context)
  467. .labelMedium
  468. .fontWeight,
  469. fontStyle:
  470. FlutterFlowTheme.of(context)
  471. .labelMedium
  472. .fontStyle,
  473. ),
  474. enabledBorder: OutlineInputBorder(
  475. borderSide: BorderSide(
  476. color: Color(0x00000000),
  477. width: 1.0,
  478. ),
  479. borderRadius:
  480. BorderRadius.circular(8.0),
  481. ),
  482. focusedBorder: OutlineInputBorder(
  483. borderSide: BorderSide(
  484. color: Color(0x00000000),
  485. width: 1.0,
  486. ),
  487. borderRadius:
  488. BorderRadius.circular(8.0),
  489. ),
  490. errorBorder: OutlineInputBorder(
  491. borderSide: BorderSide(
  492. color: FlutterFlowTheme.of(context)
  493. .error,
  494. width: 1.0,
  495. ),
  496. borderRadius:
  497. BorderRadius.circular(8.0),
  498. ),
  499. focusedErrorBorder: OutlineInputBorder(
  500. borderSide: BorderSide(
  501. color: FlutterFlowTheme.of(context)
  502. .error,
  503. width: 1.0,
  504. ),
  505. borderRadius:
  506. BorderRadius.circular(8.0),
  507. ),
  508. filled: true,
  509. fillColor: FlutterFlowTheme.of(context)
  510. .secondaryBackground,
  511. suffixIcon: InkWell(
  512. onTap: () async {
  513. safeSetState(() => _model
  514. .passwordFieldVisibility =
  515. !_model.passwordFieldVisibility);
  516. },
  517. focusNode:
  518. FocusNode(skipTraversal: true),
  519. child: Icon(
  520. _model.passwordFieldVisibility
  521. ? Icons.visibility_outlined
  522. : Icons.visibility_off_outlined,
  523. size: 24.0,
  524. ),
  525. ),
  526. ),
  527. style: FlutterFlowTheme.of(context)
  528. .bodyMedium
  529. .override(
  530. font: GoogleFonts.roboto(
  531. fontWeight:
  532. FlutterFlowTheme.of(context)
  533. .bodyMedium
  534. .fontWeight,
  535. fontStyle:
  536. FlutterFlowTheme.of(context)
  537. .bodyMedium
  538. .fontStyle,
  539. ),
  540. letterSpacing: 0.0,
  541. fontWeight:
  542. FlutterFlowTheme.of(context)
  543. .bodyMedium
  544. .fontWeight,
  545. fontStyle:
  546. FlutterFlowTheme.of(context)
  547. .bodyMedium
  548. .fontStyle,
  549. ),
  550. cursorColor: FlutterFlowTheme.of(context)
  551. .primaryText,
  552. enableInteractiveSelection: true,
  553. validator: _model
  554. .passwordFieldTextControllerValidator
  555. .asValidator(context),
  556. ),
  557. ),
  558. ),
  559. FFButtonWidget(
  560. onPressed: () async {
  561. _model.resultDrupalLogin =
  562. await actions.drupalLogin(
  563. _model.usernameFieldTextController.text,
  564. _model.passwordFieldTextController.text,
  565. 'https://uitgaanskrant.com/en/flutterdrup/user/login.json',
  566. );
  567. if (_model.resultDrupalLogin != null) {
  568. ScaffoldMessenger.of(context).showSnackBar(
  569. SnackBar(
  570. content: Text(
  571. 'Succesvol ingelogd!',
  572. style: TextStyle(
  573. color: FlutterFlowTheme.of(context)
  574. .primaryText,
  575. ),
  576. ),
  577. duration: Duration(milliseconds: 4000),
  578. backgroundColor:
  579. FlutterFlowTheme.of(context)
  580. .secondary,
  581. ),
  582. );
  583. context.goNamed(FavorietenWidget.routeName);
  584. } else {
  585. ScaffoldMessenger.of(context).showSnackBar(
  586. SnackBar(
  587. content: Text(
  588. 'Inloggen mislukt. Controleer je gebruikersnaam en wachtwoord.',
  589. style: TextStyle(
  590. color: FlutterFlowTheme.of(context)
  591. .primaryText,
  592. ),
  593. ),
  594. duration: Duration(milliseconds: 4000),
  595. backgroundColor:
  596. FlutterFlowTheme.of(context)
  597. .secondary,
  598. ),
  599. );
  600. }
  601. safeSetState(() {});
  602. },
  603. text: FFLocalizations.of(context).getText(
  604. 'gkx4luhw' /* Inloggen */,
  605. ),
  606. options: FFButtonOptions(
  607. width: double.infinity,
  608. height: 40.0,
  609. padding: EdgeInsetsDirectional.fromSTEB(
  610. 16.0, 0.0, 16.0, 0.0),
  611. iconPadding: EdgeInsetsDirectional.fromSTEB(
  612. 0.0, 0.0, 0.0, 0.0),
  613. color: FlutterFlowTheme.of(context).secondary,
  614. textStyle: FlutterFlowTheme.of(context)
  615. .titleSmall
  616. .override(
  617. font: GoogleFonts.roboto(
  618. fontWeight: FontWeight.bold,
  619. fontStyle:
  620. FlutterFlowTheme.of(context)
  621. .titleSmall
  622. .fontStyle,
  623. ),
  624. color: Colors.white,
  625. fontSize: 24.0,
  626. letterSpacing: 0.0,
  627. fontWeight: FontWeight.bold,
  628. fontStyle: FlutterFlowTheme.of(context)
  629. .titleSmall
  630. .fontStyle,
  631. ),
  632. elevation: 0.0,
  633. borderRadius: BorderRadius.circular(8.0),
  634. ),
  635. ),
  636. InkWell(
  637. splashColor: Colors.transparent,
  638. focusColor: Colors.transparent,
  639. hoverColor: Colors.transparent,
  640. highlightColor: Colors.transparent,
  641. onTap: () async {
  642. context.pushNamed(
  643. WachtwoordVergetenWidget.routeName);
  644. },
  645. child: Text(
  646. FFLocalizations.of(context).getText(
  647. 'utppw2si' /* Wachtwoord vergeten? */,
  648. ),
  649. style: FlutterFlowTheme.of(context)
  650. .bodyMedium
  651. .override(
  652. font: GoogleFonts.roboto(
  653. fontWeight:
  654. FlutterFlowTheme.of(context)
  655. .bodyMedium
  656. .fontWeight,
  657. fontStyle:
  658. FlutterFlowTheme.of(context)
  659. .bodyMedium
  660. .fontStyle,
  661. ),
  662. color: FlutterFlowTheme.of(context)
  663. .secondary,
  664. letterSpacing: 0.0,
  665. fontWeight: FlutterFlowTheme.of(context)
  666. .bodyMedium
  667. .fontWeight,
  668. fontStyle: FlutterFlowTheme.of(context)
  669. .bodyMedium
  670. .fontStyle,
  671. decoration: TextDecoration.underline,
  672. ),
  673. ),
  674. ),
  675. InkWell(
  676. splashColor: Colors.transparent,
  677. focusColor: Colors.transparent,
  678. hoverColor: Colors.transparent,
  679. highlightColor: Colors.transparent,
  680. onTap: () async {
  681. await launchURL(
  682. 'https://uitgaanskrant.com/nl/user/register');
  683. },
  684. child: Text(
  685. FFLocalizations.of(context).getText(
  686. 'pq12hujc' /* Nog geen account? Registreren */,
  687. ),
  688. style: FlutterFlowTheme.of(context)
  689. .bodyMedium
  690. .override(
  691. font: GoogleFonts.roboto(
  692. fontWeight:
  693. FlutterFlowTheme.of(context)
  694. .bodyMedium
  695. .fontWeight,
  696. fontStyle:
  697. FlutterFlowTheme.of(context)
  698. .bodyMedium
  699. .fontStyle,
  700. ),
  701. color: FlutterFlowTheme.of(context)
  702. .secondary,
  703. letterSpacing: 0.0,
  704. fontWeight: FlutterFlowTheme.of(context)
  705. .bodyMedium
  706. .fontWeight,
  707. fontStyle: FlutterFlowTheme.of(context)
  708. .bodyMedium
  709. .fontStyle,
  710. decoration: TextDecoration.underline,
  711. ),
  712. ),
  713. ),
  714. ],
  715. ),
  716. ),
  717. ],
  718. ),
  719. ],
  720. ),
  721. ],
  722. ),
  723. ),
  724. ),
  725. ),
  726. );
  727. }
  728. }