wip: history request groups

This commit is contained in:
DenserMeerkat
2024-07-14 23:16:29 +05:30
parent 78c5fc6a94
commit d5feb0b091
31 changed files with 1284 additions and 71 deletions

View File

@ -0,0 +1,110 @@
import 'package:apidash/models/history_meta_model.dart';
import 'package:flutter/material.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart';
import 'texts.dart' show MethodBox;
class SidebarHistoryCard extends StatelessWidget {
const SidebarHistoryCard({
super.key,
required this.id,
required this.models,
required this.method,
this.selectedId,
this.requestGroupSize = 1,
this.onTap,
});
final String id;
final List<HistoryMetaModel> models;
final HTTPVerb method;
final String? selectedId;
final int requestGroupSize;
final Function()? onTap;
@override
Widget build(BuildContext context) {
final Color color = Theme.of(context).colorScheme.surface;
final Color colorVariant =
Theme.of(context).colorScheme.surfaceContainerHighest.withOpacity(0.5);
final model = models.first;
final Color surfaceTint = Theme.of(context).colorScheme.primary;
bool isSelected = selectedId == getHistoryRequestKey(model);
final String name = getHistoryRequestName(model);
return Tooltip(
message: name,
triggerMode: TooltipTriggerMode.manual,
waitDuration: const Duration(seconds: 1),
child: Card(
shape: const RoundedRectangleBorder(
borderRadius: kBorderRadius8,
),
elevation: isSelected ? 1 : 0,
surfaceTintColor: isSelected ? surfaceTint : null,
color: isSelected
? Theme.of(context).colorScheme.brightness == Brightness.dark
? colorVariant
: color
: color,
margin: EdgeInsets.zero,
child: InkWell(
onTap: onTap,
borderRadius: kBorderRadius8,
hoverColor: colorVariant,
focusColor: colorVariant.withOpacity(0.5),
child: Padding(
padding: const EdgeInsets.only(
left: 6,
right: 6,
top: 5,
bottom: 5,
),
child: SizedBox(
height: 20,
child: Row(
children: [
MethodBox(method: method),
kHSpacer4,
Expanded(
child: Text(
name,
softWrap: false,
overflow: TextOverflow.fade,
),
),
requestGroupSize > 1 ? kHSpacer4 : const SizedBox.shrink(),
Visibility(
visible: requestGroupSize > 1,
child: Container(
padding: kPh4,
constraints: const BoxConstraints(minWidth: 24),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.primaryContainer,
borderRadius: kBorderRadius6,
),
child: Center(
child: Text(
requestGroupSize == 2
? requestGroupSize.toString()
: "9+",
style: Theme.of(context)
.textTheme
.labelSmall
?.copyWith(
fontWeight: FontWeight.bold,
color: Theme.of(context)
.colorScheme
.onPrimaryContainer,
)),
),
),
),
],
),
),
),
),
),
);
}
}

View File

@ -0,0 +1,65 @@
import 'package:flutter/material.dart';
import 'package:multi_split_view/multi_split_view.dart';
import 'package:apidash/consts.dart';
class HistorySplitView extends StatefulWidget {
const HistorySplitView({
super.key,
required this.sidebarWidget,
required this.mainWidget,
});
final Widget sidebarWidget;
final Widget mainWidget;
@override
HistorySplitViewState createState() => HistorySplitViewState();
}
class HistorySplitViewState extends State<HistorySplitView> {
final MultiSplitViewController _controller = MultiSplitViewController(
areas: [
Area(id: "sidebar", min: 200, size: 220, max: 300),
Area(id: "main"),
],
);
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MultiSplitViewTheme(
data: MultiSplitViewThemeData(
dividerThickness: 3,
dividerPainter: DividerPainters.background(
color: Theme.of(context).colorScheme.surfaceContainerHighest,
highlightedColor: Theme.of(context).colorScheme.outline.withOpacity(
kHintOpacity,
),
animationEnabled: false,
),
),
child: MultiSplitView(
controller: _controller,
sizeOverflowPolicy: SizeOverflowPolicy.shrinkFirst,
sizeUnderflowPolicy: SizeUnderflowPolicy.stretchLast,
builder: (context, area) {
return switch (area.id) {
"sidebar" => widget.sidebarWidget,
"main" => widget.mainWidget,
_ => Container(),
};
},
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}

View File

@ -6,6 +6,7 @@ export 'button_save_download.dart';
export 'button_send.dart';
export 'card_request_details.dart';
export 'card_sidebar_environment.dart';
export 'card_sidebar_history.dart';
export 'card_sidebar_request.dart';
export 'checkbox.dart';
export 'code_previewer.dart';
@ -42,6 +43,7 @@ export 'snackbars.dart';
export 'splitview_drawer.dart';
export 'splitview_dashboard.dart';
export 'splitview_equal.dart';
export 'splitview_history.dart';
export 'suggestions_menu.dart';
export 'tables.dart';
export 'tabs.dart';