partial implementation of riverpod for sub-page management in the conversations list

This commit is contained in:
Joshua
2024-07-06 16:06:46 -06:00
parent 1d5bf55eb9
commit a9d4f619e3
2 changed files with 36 additions and 68 deletions
+1 -2
View File
@@ -6,7 +6,6 @@ import 'package:provider/provider.dart';
import 'package:app/theme.dart';
// my_state.dart (Provider for selected index)
final _selectedIndex = ValueNotifier<int>(0);
class MyState with ChangeNotifier {
@@ -54,7 +53,7 @@ class MyApp extends ConsumerWidget {
// This list holds the pages to navigate between
final List<Widget> _pages = [
// Replace with the widget for your first page (e.g., HomeScreen())
const Center(child: ConversationsListWidget()),
Center(child: ConversationsListWidget()),
// Replace with the widget for your second page (e.g., SettingsPage())
const Center(child: SettingsWidget()),
];
@@ -1,3 +1,6 @@
import 'package:app/pages/conversation_widget.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '/components/conversation_options/conversation_options_widget.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:flutter/material.dart';
@@ -9,6 +12,18 @@ import 'package:app/theme.dart';
import 'conversations_list_model.dart';
export 'conversations_list_model.dart';
final conversationIndex = ValueNotifier<int>(0);
class MyState with ChangeNotifier {
int get selectedIndex => conversationIndex.value;
set selectedIndex(int value) {
conversationIndex.value = value;
notifyListeners();
}
}
class ConversationsListWidget extends StatefulWidget {
const ConversationsListWidget({super.key});
@@ -19,6 +34,15 @@ class ConversationsListWidget extends StatefulWidget {
class _ConversationsListWidgetState extends State<ConversationsListWidget> {
late ConversationsListModel _model;
final selectedIndexProvider = StateProvider<int>((_) => 0); // Initial state
final List<Widget> _pages = [
// Replace with the widget for your first page (e.g., HomeScreen())
Center(child: ConversationWidget()),
// TODO: Dynamically generate list of pages based upon existing conversations.
// This requires retrievable conversations from the server side.
];
final scaffoldKey = GlobalKey<ScaffoldState>();
@@ -50,7 +74,7 @@ class _ConversationsListWidgetState extends State<ConversationsListWidget> {
const Padding(
padding: EdgeInsetsDirectional.fromSTEB(16, 0, 0, 0),
child: Text(
'AI conversations',
'Conversations',
style: AppTheme.labelMedium,
),
),
@@ -87,7 +111,7 @@ class _ConversationsListWidgetState extends State<ConversationsListWidget> {
child: const Align(
alignment: AlignmentDirectional(0, 0),
child: Icon(
Icons.settings_outlined,
Icons.settings_outlined, // TODO: Dynamically generate or allow users to color code/tag conversations.
color: AppTheme.secondaryText,
size: 48,
),
@@ -121,7 +145,7 @@ class _ConversationsListWidgetState extends State<ConversationsListWidget> {
mainAxisSize: MainAxisSize.max,
children: [
Text(
'Hello World',
'Hello World', // TODO: Dynamically obtain conversation title from server.
style: AppTheme.headlineLarge,
),
],
@@ -135,7 +159,7 @@ class _ConversationsListWidgetState extends State<ConversationsListWidget> {
children: [
Expanded(
child: Text(
'Hello World',
'Hello World', // TODO: Summary or list of models used
style: AppTheme.bodyMedium,
),
),
@@ -161,6 +185,12 @@ class _ConversationsListWidgetState extends State<ConversationsListWidget> {
),
],
),
onTap: () => {
print("opening existing conversation")
},
onLongPress: () => {
print("opening options")
},
),
),
],
@@ -169,68 +199,7 @@ class _ConversationsListWidgetState extends State<ConversationsListWidget> {
),
],
),
// child: Scaffold(
// key: scaffoldKey,
// backgroundColor: AppTheme.secondaryBackground,
// floatingActionButton: InkWell(
// splashColor: Colors.transparent,
// focusColor: Colors.transparent,
// hoverColor: Colors.transparent,
// highlightColor: Colors.transparent,
// onLongPress: () async {
// await showModalBottomSheet(
// isScrollControlled: true,
// backgroundColor: Colors.transparent,
// enableDrag: false,
// context: context,
// builder: (context) {
// return GestureDetector(
// onTap: () => _model.unfocusNode.canRequestFocus
// ? FocusScope.of(context).requestFocus(_model.unfocusNode)
// : FocusScope.of(context).unfocus(),
// child: Padding(
// padding: MediaQuery.viewInsetsOf(context),
// child: const ConversationOptionsWidget(),
// ),
// );
// },
// ).then((value) => safeSetState(() {}));
//
// // TODO
// //context.pushNamed('Conversation');
// },
// child: FloatingActionButton(
// // TODO
// // onPressed: () async {
// // context.pushNamed('Conversation');
// // },
// onPressed: () {
// print("fab pressed");
// },
// backgroundColor: AppTheme.primaryBackground,
// elevation: 8,
// child: const Icon(
// Icons.add,
// color: AppTheme.info,
// size: 24,
// ),
// ),
// ),
// appBar: AppBar(
// backgroundColor: AppTheme.secondaryBackground,
// automaticallyImplyLeading: false,
// title: const Text(
// 'My Chats',
// style: AppTheme.headlineLarge,
// ),
// actions: const [],
// centerTitle: false,
// elevation: 0,
// ),
// body: SafeArea(
//
// ),
),
);
}
}
}