opt. & new: icons

This commit is contained in:
lollipopkit
2024-04-26 00:39:03 +08:00
parent 3ccb61fba2
commit 3237d9eb21
20 changed files with 254 additions and 171 deletions

View File

@@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:toolbox/view/widget/val_builder.dart';
import '../../core/persistant_store.dart';
@@ -22,9 +23,9 @@ class StoreSwitch extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: prop.listenable(),
builder: (context, bool value, widget) {
return ValBuilder(
listenable: prop.listenable(),
builder: (value) {
return Switch(
value: value,
onChanged: (value) async {

View File

@@ -5,6 +5,7 @@ import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/data/res/ui.dart';
import 'package:toolbox/view/widget/input_field.dart';
import 'package:toolbox/view/widget/cardx.dart';
import 'package:toolbox/view/widget/val_builder.dart';
import '../../data/res/color.dart';
@@ -196,9 +197,9 @@ class TagSwitcher extends StatelessWidget implements PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: tags,
builder: (_, vals, __) {
return ValBuilder(
listenable: tags,
builder: (vals) {
if (vals.isEmpty) return UIs.placeholder;
final items = <String?>[null, ...vals];
return Container(

View File

@@ -0,0 +1,35 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
final class ValBuilder<T> extends ValueListenableBuilder<T> {
ValBuilder({
super.key,
required ValueListenable<T> listenable,
required Widget Function(T) builder,
}) : super(
valueListenable: listenable,
builder: (_, val, __) => builder(val),
);
}
final class ValChildBuilder<T> extends ValueListenableBuilder<T> {
ValChildBuilder({
super.key,
required ValueListenable<T> listenable,
required Widget Function(T, Widget?) builder,
super.child,
}) : super(
valueListenable: listenable,
builder: (_, val, child) => builder(val, child),
);
}
final class ListenBuilder extends ListenableBuilder {
ListenBuilder({
super.key,
required super.listenable,
required Widget Function() builder,
}) : super(
builder: (_, __) => builder(),
);
}