import 'dart:convert'; import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/stores/settings/settings_store.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; class FaqPage extends BasePage { @override String get title => S.current.faq; @override Widget body(BuildContext context) => FaqForm(); } class FaqForm extends StatefulWidget { @override FaqFormState createState() => FaqFormState(); } class FaqFormState extends State { List icons; List colors; bool isLoaded = false; @override Widget build(BuildContext context) { final addIcon = Icon(Icons.add, color: Theme.of(context).primaryTextTheme.title.color); final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola); return Container( padding: EdgeInsets.only(top: 12, left: 24), child: FutureBuilder( builder: (context, snapshot) { final faqItems = jsonDecode(snapshot.data.toString()) as List; if (snapshot.hasData) { setIconsAndColors(context, faqItems.length, addIcon); } return SingleChildScrollView( child: Column( children: [ StandardListSeparator(), ListView.separated( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemBuilder: (BuildContext context, int index) { final itemTitle = faqItems[index]["question"].toString(); final itemChild = faqItems[index]["answer"].toString(); return ListTileTheme( contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6), child: ExpansionTile( title: Text( itemTitle, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: colors[index] ), ), trailing: icons[index], onExpansionChanged: (value) { setState(() { if (value) { icons[index] = removeIcon; colors[index] = Palette.blueCraiola; } else { icons[index] = addIcon; colors[index] = Theme.of(context).primaryTextTheme.title.color; } }); }, children: [ Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Expanded( child: Container( padding: EdgeInsets.only( right: 24.0, ), child: Text( itemChild, style: TextStyle( fontSize: 14, fontWeight: FontWeight.normal, color: Theme.of(context).primaryTextTheme.title.color ), ), )) ], ) ], ), ); }, separatorBuilder: (_, __) => StandardListSeparator(), itemCount: faqItems == null ? 0 : faqItems.length, ) ], ), ); }, future: rootBundle.loadString(getFaqPath(context)), ), ); } void setIconsAndColors(BuildContext context, int index, Icon icon) { if (isLoaded) { return; } icons = List.generate(index, (int i) => icon); colors = List.generate(index, (int i) => Theme.of(context).primaryTextTheme.title.color); isLoaded = true; } String getFaqPath(BuildContext context) { final settingsStore = Provider.of(context); switch (settingsStore.languageCode) { case 'en': return 'assets/faq/faq_en.json'; case 'uk': return 'assets/faq/faq_uk.json'; case 'ru': return 'assets/faq/faq_ru.json'; case 'es': return 'assets/faq/faq_es.json'; case 'ja': return 'assets/faq/faq_ja.json'; case 'ko': return 'assets/faq/faq_ko.json'; case 'hi': return 'assets/faq/faq_hi.json'; case 'de': return 'assets/faq/faq_de.json'; case 'zh': return 'assets/faq/faq_zh.json'; case 'pt': return 'assets/faq/faq_pt.json'; case 'pl': return 'assets/faq/faq_pl.json'; case 'nl': return 'assets/faq/faq_nl.json'; default: return 'assets/faq/faq_en.json'; } } }