import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_highlight/flutter_highlight.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:qinglong_app/base/http/api.dart'; import 'package:qinglong_app/base/http/http.dart'; import 'package:qinglong_app/base/ql_app_bar.dart'; import 'package:qinglong_app/base/theme.dart'; import 'package:qinglong_app/base/ui/lazy_load_state.dart'; import 'package:qinglong_app/utils/extension.dart'; /// @author NewTab class ScriptDetailPage extends ConsumerStatefulWidget { final String title; final String? path; const ScriptDetailPage({ Key? key, required this.title, this.path, }) : super(key: key); @override _ScriptDetailPageState createState() => _ScriptDetailPageState(); } class _ScriptDetailPageState extends ConsumerState with LazyLoadState { String? content; @override Widget build(BuildContext context) { return Scaffold( appBar: QlAppBar( canBack: true, backCall: () { Navigator.of(context).pop(); }, title: "脚本详情", ), body:content == null ? const Center( child: CupertinoActivityIndicator(), ) : SingleChildScrollView( child: HighlightView( content ?? "", language: getLanguageType(widget.title), padding: const EdgeInsets.symmetric( horizontal: 15, ), theme: ref.watch(themeProvider).themeColor.codeEditorTheme(), tabSize: 14, ), ), ); } Future loadData() async { HttpResponse response = await Api.scriptDetail( widget.title, widget.path, ); if (response.success) { content = response.bean; setState(() {}); } else { response.message?.toast(); } } getLanguageType(String title) { if (title.endsWith(".js")) { return "js"; } if (title.endsWith(".sh")) { return "sh"; } if (title.endsWith(".py")) { return "py"; } if (title.endsWith(".json")) { return "json"; } if (title.endsWith(".yaml")) { return "yaml"; } return "html"; } @override void onLazyLoad() { loadData(); } }