mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
new: picker & opt. rm -r
This commit is contained in:
@@ -1,13 +1,11 @@
|
||||
import 'package:choice/choice.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/context/locale.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/view/widget/choice_chip.dart';
|
||||
|
||||
import '../../../data/model/server/snippet.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../view/widget/input_field.dart';
|
||||
import '../../../view/widget/picker.dart';
|
||||
import '../../route.dart';
|
||||
|
||||
extension DialogX on BuildContext {
|
||||
Future<T?> showRoundDialog<T>({
|
||||
@@ -53,45 +51,60 @@ extension DialogX on BuildContext {
|
||||
);
|
||||
}
|
||||
|
||||
void showSnippetDialog(
|
||||
void Function(Snippet s) onSelected,
|
||||
) {
|
||||
if (Pros.snippet.snippets.isEmpty) {
|
||||
showRoundDialog(
|
||||
child: Text(l10n.noSavedSnippet),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => pop(),
|
||||
child: Text(l10n.ok),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
pop();
|
||||
AppRoute.snippetEdit().go(this);
|
||||
},
|
||||
child: Text(l10n.add),
|
||||
)
|
||||
],
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
var snippet = Pros.snippet.snippets.first;
|
||||
showRoundDialog(
|
||||
Future<List<T>?> showPickDialog<T>({
|
||||
required List<T?> items,
|
||||
required String Function(T) name,
|
||||
bool multi = true,
|
||||
}) async {
|
||||
var vals = <T>[];
|
||||
final sure = await showRoundDialog<bool>(
|
||||
title: Text(l10n.choose),
|
||||
child: Picker(
|
||||
items: Pros.snippet.snippets.map((e) => Text(e.name)).toList(),
|
||||
onSelected: (idx) => snippet = Pros.snippet.snippets[idx],
|
||||
child: Choice<T>(
|
||||
onChanged: (value) => vals = value,
|
||||
multiple: multi,
|
||||
clearable: true,
|
||||
builder: (state, _) {
|
||||
return Wrap(
|
||||
children: List<Widget>.generate(
|
||||
items.length,
|
||||
(index) {
|
||||
final item = items[index];
|
||||
if (item == null) return UIs.placeholder;
|
||||
return ChoiceChipX<T>(
|
||||
label: name(item),
|
||||
state: state,
|
||||
value: item,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
pop();
|
||||
onSelected(snippet);
|
||||
},
|
||||
onPressed: () => pop(true),
|
||||
child: Text(l10n.ok),
|
||||
)
|
||||
),
|
||||
],
|
||||
);
|
||||
if (sure == true && vals.isNotEmpty) {
|
||||
return vals;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<T?> showPickSingleDialog<T>({
|
||||
required List<T?> items,
|
||||
required String Function(T) name,
|
||||
}) async {
|
||||
final vals = await showPickDialog<T>(
|
||||
items: items,
|
||||
name: name,
|
||||
multi: false,
|
||||
);
|
||||
if (vals != null && vals.isNotEmpty) {
|
||||
return vals.first;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user