import 'package:flutter/cupertino.dart'; import 'package:flutter/material.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/routes.dart'; import 'package:qinglong_app/base/theme.dart'; import 'package:qinglong_app/base/ui/lazy_load_state.dart'; import 'package:qinglong_app/module/others/scripts/script_bean.dart'; import 'package:qinglong_app/utils/extension.dart'; /// @author NewTab class ScriptPage extends ConsumerStatefulWidget { const ScriptPage({Key? key}) : super(key: key); @override _ScriptPageState createState() => _ScriptPageState(); } class _ScriptPageState extends ConsumerState with LazyLoadState { List list = []; @override Widget build(BuildContext context) { return Scaffold( appBar: QlAppBar( canBack: true, backCall: () { Navigator.of(context).pop(); }, title: "脚本管理", ), body: list.isEmpty ? const Center( child: CupertinoActivityIndicator(), ) : ListView.builder( itemBuilder: (context, index) { ScriptBean item = list[index]; return ColoredBox( color: ref.watch(themeProvider).themeColor.settingBgColor(), child: (item.children != null && item.children!.isNotEmpty) ? ExpansionTile( title: Text( item.title ?? "", style: TextStyle( color: (item.disabled ?? false) ? ref.watch(themeProvider).themeColor.descColor() : ref.watch(themeProvider).themeColor.titleColor(), fontSize: 16, ), ), children: item.children! .map((e) => ListTile( onTap: () { Navigator.of(context).pushNamed( Routes.routeScriptDetail, arguments: { "title": e.title, "path": e.parent, }, ); }, title: Text( e.title ?? "", style: TextStyle( color: (item.disabled ?? false) ? ref.watch(themeProvider).themeColor.descColor() : ref.watch(themeProvider).themeColor.titleColor(), fontSize: 14, ), ), )) .toList(), ) : ListTile( onTap: () { Navigator.of(context).pushNamed( Routes.routeScriptDetail, arguments: { "title": item.title, "path": "", }, ); }, title: Text( item.title ?? "", style: TextStyle( color: (item.disabled ?? false) ? ref.watch(themeProvider).themeColor.descColor() : ref.watch(themeProvider).themeColor.titleColor(), fontSize: 16, ), ), ), ); }, itemCount: list.length, ), ); } Future loadData() async { HttpResponse> response = await Api.scripts(); if (response.success) { list.clear(); list.addAll(response.bean ?? []); setState(() {}); } else { response.message?.toast(); } } @override void onLazyLoad() { loadData(); } }