mirror of
https://github.com/foss42/apidash.git
synced 2025-12-02 02:39:19 +08:00
feat: integrate DashbotTab into mobile requests page
This commit is contained in:
@@ -450,6 +450,7 @@ const kLabelDownload = "Download";
|
|||||||
const kLabelSaving = "Saving";
|
const kLabelSaving = "Saving";
|
||||||
const kLabelSaved = "Saved";
|
const kLabelSaved = "Saved";
|
||||||
const kLabelCode = "Code";
|
const kLabelCode = "Code";
|
||||||
|
const kLabelDashBot = "DashBot";
|
||||||
const kLabelDuplicate = "Duplicate";
|
const kLabelDuplicate = "Duplicate";
|
||||||
const kLabelSelect = "Select";
|
const kLabelSelect = "Select";
|
||||||
const kLabelContinue = "Continue";
|
const kLabelContinue = "Continue";
|
||||||
|
|||||||
72
lib/dashbot/dashbot_tab.dart
Normal file
72
lib/dashbot/dashbot_tab.dart
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
import 'package:apidash/providers/providers.dart';
|
||||||
|
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||||
|
import 'core/routes/dashbot_router.dart';
|
||||||
|
import 'core/routes/dashbot_routes.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
|
||||||
|
class DashbotTab extends ConsumerStatefulWidget {
|
||||||
|
const DashbotTab({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
ConsumerState<DashbotTab> createState() => _DashbotTabState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DashbotTabState extends ConsumerState<DashbotTab>
|
||||||
|
with AutomaticKeepAliveClientMixin {
|
||||||
|
static final GlobalKey<NavigatorState> _navKey = GlobalKey<NavigatorState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get wantKeepAlive => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
super.build(context);
|
||||||
|
final currentRequest = ref.watch(selectedRequestModelProvider);
|
||||||
|
|
||||||
|
// If a response arrives while user is on default, navigate to home.
|
||||||
|
ref.listen(
|
||||||
|
selectedRequestModelProvider,
|
||||||
|
(prev, next) {
|
||||||
|
if (next?.responseStatus != null) {
|
||||||
|
_navKey.currentState?.pushNamed(DashbotRoutes.dashbotHome);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return WillPopScope(
|
||||||
|
onWillPop: () async {
|
||||||
|
final canPop = _navKey.currentState?.canPop() ?? false;
|
||||||
|
if (canPop) {
|
||||||
|
_navKey.currentState?.pop();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: kP10,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||||
|
border: Border.all(
|
||||||
|
color: Theme.of(context).colorScheme.surfaceContainerHighest),
|
||||||
|
borderRadius: kBorderRadius8,
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Navigator(
|
||||||
|
key: _navKey,
|
||||||
|
initialRoute: currentRequest?.responseStatus == null
|
||||||
|
? DashbotRoutes.dashbotDefault
|
||||||
|
: DashbotRoutes.dashbotHome,
|
||||||
|
onGenerateRoute: generateRoute,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -93,17 +93,23 @@ class _DashbotHomePageState extends ConsumerState<DashbotHomePage> {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
if (currentRequest?.httpResponseModel?.statusCode != null &&
|
],
|
||||||
currentRequest?.httpResponseModel?.statusCode == 200) ...[
|
),
|
||||||
|
if (currentRequest?.httpResponseModel?.statusCode != null &&
|
||||||
|
currentRequest?.httpResponseModel?.statusCode == 200) ...[
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
Row(
|
||||||
|
children: const [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: GenerateToolButton(),
|
child: GenerateToolButton(),
|
||||||
),
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: AIGenerateUIButton(),
|
child: AIGenerateUIButton(),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
],
|
),
|
||||||
),
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import '../../common_widgets/common_widgets.dart';
|
|||||||
import '../../home_page/editor_pane/details_card/response_pane.dart';
|
import '../../home_page/editor_pane/details_card/response_pane.dart';
|
||||||
import '../../home_page/editor_pane/editor_request.dart';
|
import '../../home_page/editor_pane/editor_request.dart';
|
||||||
import '../../home_page/editor_pane/url_card.dart';
|
import '../../home_page/editor_pane/url_card.dart';
|
||||||
|
import '../../../dashbot/dashbot_tab.dart';
|
||||||
|
|
||||||
class RequestTabs extends StatelessWidget {
|
class RequestTabs extends StatelessWidget {
|
||||||
const RequestTabs({
|
const RequestTabs({
|
||||||
@@ -30,6 +31,7 @@ class RequestTabs extends StatelessWidget {
|
|||||||
Tab(text: kLabelRequest),
|
Tab(text: kLabelRequest),
|
||||||
Tab(text: kLabelResponse),
|
Tab(text: kLabelResponse),
|
||||||
Tab(text: kLabelCode),
|
Tab(text: kLabelCode),
|
||||||
|
Tab(text: kLabelDashBot)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Expanded(child: RequestTabviews(controller: controller))
|
Expanded(child: RequestTabviews(controller: controller))
|
||||||
@@ -53,6 +55,7 @@ class RequestTabviews extends StatelessWidget {
|
|||||||
child: ResponsePane(),
|
child: ResponsePane(),
|
||||||
),
|
),
|
||||||
CodePane(),
|
CodePane(),
|
||||||
|
DashbotTab(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class _RequestResponsePageState extends ConsumerState<RequestResponsePage>
|
|||||||
final name = getRequestTitleFromUrl(
|
final name = getRequestTitleFromUrl(
|
||||||
ref.watch(selectedRequestModelProvider.select((value) => value?.name)));
|
ref.watch(selectedRequestModelProvider.select((value) => value?.name)));
|
||||||
final TabController requestTabController =
|
final TabController requestTabController =
|
||||||
useTabController(initialLength: 3, vsync: this);
|
useTabController(initialLength: 4, vsync: this);
|
||||||
return DrawerSplitView(
|
return DrawerSplitView(
|
||||||
scaffoldKey: kHomeScaffoldKey,
|
scaffoldKey: kHomeScaffoldKey,
|
||||||
title: Row(
|
title: Row(
|
||||||
|
|||||||
Reference in New Issue
Block a user