import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:fl_clash/common/common.dart'; import 'package:fl_clash/enum/enum.dart'; import 'package:fl_clash/models/models.dart'; import 'package:fl_clash/pages/editor.dart'; import 'package:fl_clash/providers/action.dart'; import 'package:fl_clash/providers/app.dart'; import 'package:fl_clash/providers/database.dart'; import 'package:fl_clash/state.dart'; import 'package:fl_clash/ui/icons/icons.dart'; import 'package:fl_clash/widgets/widgets.dart'; import 'package:collection/collection.dart'; import 'package:material_ui/material_ui.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; class ScriptsView extends ConsumerStatefulWidget { const ScriptsView({super.key}); @override ConsumerState createState() => _ScriptsViewState(); } class _ScriptsViewState extends ConsumerState { late final ScriptsAction _scriptsAction; @override void initState() { super.initState(); _scriptsAction = ref.read(scriptsActionProvider.notifier); } Future _handleDelete(Script script) async { final appLocalizations = context.appLocalizations; final res = await dialogs.showMessage( title: appLocalizations.tip, message: TextSpan( text: appLocalizations.deleteTip(appLocalizations.script), ), destructive: true, confirmText: appLocalizations.delete, ); if (res != true || !mounted) { return; } ref.read(scriptsProvider.notifier).del(script.id); unawaited(_clearEffect(script.id)); } Future _clearEffect(int id) async { final path = await appPath.getScriptPath(id.toString()); await File(path).safeDelete(); } Widget _buildContent(List