/// 屏蔽的分类 import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:multi_select_flutter/multi_select_flutter.dart'; import '../Method.dart'; import '../store/Categories.dart'; import 'ShadowCategoriesEvent.dart'; const _propertyName = "shadowCategories"; late List shadowCategories; /// 获取封印的类型 Future> _loadShadowCategories() async { var value = await method.loadProperty(_propertyName, jsonEncode([])); return List.of(jsonDecode(value)).map((e) => "$e").toList(); } /// 保存封印的类型 Future _saveShadowCategories(List value) { return method.saveProperty(_propertyName, jsonEncode(value)); } Future initShadowCategories() async { shadowCategories = await _loadShadowCategories(); } Future _chooseShadowCategories(BuildContext context) async { await showDialog( context: context, builder: (ctx) { var initialValue = []; for (var element in shadowCategories) { if (shadowCategories.contains(element)) { initialValue.add(element); } } return MultiSelectDialog( title: const Text('封印'), searchHint: '搜索', cancelText: const Text('取消'), confirmText: const Text('确定'), items: storedCategories.map((e) => MultiSelectItem(e, e)).toList(), initialValue: initialValue, onConfirm: (List? value) async { if (value != null) { await _saveShadowCategories(value); shadowCategories = value; shadowCategoriesEvent.broadcast(); } }, ); }, ); } Widget shadowCategoriesActionButton(BuildContext context) { return IconButton( onPressed: () { _chooseShadowCategories(context); }, icon: const Icon(Icons.hide_source), ); } Widget shadowCategoriesSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( title: const Text("封印"), subtitle: Text(jsonEncode(shadowCategories)), onTap: () async { await _chooseShadowCategories(context); setState(() {}); }, ); }, ); } const chooseShadowCategories = _chooseShadowCategories;