setting.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_app_upgrade/flutter_app_upgrade.dart';
  3. import 'package:provider/provider.dart';
  4. import 'package:twong/config/setting.dart';
  5. import 'package:twong/providers/setting.dart';
  6. import 'package:twong/utils/index.dart';
  7. import 'package:twong/config/style.dart';
  8. import 'package:twong/widgets/app_bar.dart';
  9. import 'package:twong/widgets/fsuper.dart';
  10. class SettingPage extends StatefulWidget {
  11. @override
  12. State<StatefulWidget> createState() {
  13. return _SettingPageState();
  14. }
  15. }
  16. class _SettingPageState extends State<SettingPage> {
  17. @override
  18. void initState() {
  19. super.initState();
  20. Cache.loadCache().then((res) {
  21. Provider.of<SettingModel>(context, listen: false).updateCache(res);
  22. }).catchError((err) {
  23. Log.e(err);
  24. });
  25. FlutterUpgrade.appInfo.then((value){
  26. Provider.of<SettingModel>(context, listen: false)
  27. .updateVersion(value.versionName);
  28. });
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. return Scaffold(
  33. backgroundColor: DColors.back,
  34. appBar: DAppBar("设置"),
  35. body: SafeArea(
  36. child: ListView(
  37. physics: ClampingScrollPhysics(),
  38. children: [
  39. _buildMenus(),
  40. _buildLogout()
  41. ],
  42. ),
  43. ),
  44. );
  45. }
  46. Widget _buildMenus() {
  47. List<Widget> widgets = List<Widget>();
  48. for(var item in SettingConfig.data) {
  49. widgets.add(FSuper(height: 46.px,
  50. text: item.name,
  51. onClick: () {
  52. if(item.route != null) {
  53. Navigator.pushNamed(context, item.route);
  54. } else if(item.onTap != null) {
  55. item.onTap();
  56. }
  57. },
  58. textAlignment: Alignment.centerLeft,
  59. width: double.infinity,
  60. padding: EdgeInsets.only(left: 46.px),
  61. margin: EdgeInsets.only(top: 6.px),
  62. corner: FCorner.all(6.px),
  63. backgroundColor: Colors.white,
  64. child1: Icon(item.icon),
  65. child1Alignment: Alignment.centerLeft,
  66. child1Margin: EdgeInsets.only(left: 6.px),
  67. child2: item.subText == null ? Icon(Icons.chevron_right,
  68. color: Colors.grey) : item.subText,
  69. child2Alignment: Alignment.centerRight,
  70. child2Margin: EdgeInsets.only(right: 12.px),
  71. ));
  72. }
  73. return Container(
  74. margin: EdgeInsets.only(left: 12.px, right: 12.px),
  75. child: Column(
  76. children: widgets
  77. ),
  78. );
  79. }
  80. Widget _buildLogout () {
  81. return Container(
  82. padding: EdgeInsets.all(12.px),
  83. child: FlatButton(
  84. color: DColors.Main,
  85. shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(20))),
  86. onPressed: () {
  87. Utils.showAlert(context, title: "确定退出登陆?", ok: () {
  88. Cache.clearAll();
  89. Navigator.pop(context);
  90. });
  91. },
  92. child: Text('退出登录', style: TextStyle(color: Colors.white)),
  93. ),
  94. );
  95. }
  96. }