markdown_view.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:flutter_markdown/flutter_markdown.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:get/get.dart';
  6. import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
  7. import '../../../base/base_view.dart';
  8. import '../../../widgets/ix_app_bar.dart';
  9. import '../controllers/markdown_controller.dart';
  10. class MarkdownView extends BaseView<MarkdownController> {
  11. const MarkdownView({super.key});
  12. @override
  13. PreferredSizeWidget? get appBar => IXAppBar(title: controller.title);
  14. @override
  15. Widget buildContent(BuildContext context) {
  16. return _buildMarkdownContent();
  17. }
  18. Widget _buildMarkdownContent() {
  19. return FutureBuilder(
  20. future: rootBundle.loadString('assets/md/${controller.filename}.md'),
  21. builder: (BuildContext context, AsyncSnapshot snapshot) {
  22. if (snapshot.connectionState == ConnectionState.done) {
  23. if (snapshot.hasData) {
  24. return Markdown(
  25. physics: const BouncingScrollPhysics(),
  26. data: snapshot.data,
  27. );
  28. }
  29. }
  30. return Center(
  31. child: SizedBox(
  32. width: 20.w,
  33. height: 20.w,
  34. child: CircularProgressIndicator(
  35. strokeWidth: 2,
  36. valueColor: AlwaysStoppedAnimation<Color>(
  37. Get.reactiveTheme.primaryColor,
  38. ),
  39. ),
  40. ),
  41. );
  42. },
  43. );
  44. }
  45. }