ListView scrollt nicht bis zum Ende, sondern nur bis zu einem bestimmten Punkt, und ich weiß nicht warum. flatternAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 ListView scrollt nicht bis zum Ende, sondern nur bis zu einem bestimmten Punkt, und ich weiß nicht warum. flattern

Post by Anonymous »

Ich erstelle eine Chatbot -App und habe ein Problem mit ListView, wenn ich Message ListView nur an einen bestimmten Punkt sende, sollte aber bis zum Ende sein. < /p>
import 'package:ai_language_learning_app/features/chat/domain/entities/chat_message_entity.dart';
import 'package:ai_language_learning_app/features/chat/presentation/cubits/chat_cubit.dart';
import 'package:ai_language_learning_app/features/chat/presentation/cubits/chat_state.dart';
import 'package:ai_language_learning_app/features/chat/presentation/widgets/app_bar.dart';
import 'package:ai_language_learning_app/features/chat/presentation/widgets/chat_text_field.dart';
import 'package:ai_language_learning_app/features/chat/presentation/widgets/message.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class ChatPage extends StatefulWidget {
const ChatPage({super.key});

@override
State createState() => _ChatPageState();
}

class _ChatPageState extends State {
final _userInputController = TextEditingController();
final _scrollController = ScrollController();

@override
void initState() async {
super.initState();
await context.read().fetchMessages();
}

@override
void dispose() {
_userInputController.dispose();
_scrollController.dispose();
super.dispose();
}

Future _sendMessage(ChatMessageEntity message) async {
await context.read().sendMessage(message);
}

Future _getAIAnswer(String prompt) async {
return await context.read().getAIAnswer(prompt);
}

void _scrollToBottom() {
_scrollController.jumpTo(
_scrollController.position.maxScrollExtent,
);
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: Aplicationbar(
title: Text('ChatBot'),
),
extendBody: true,
backgroundColor: Theme.of(context).colorScheme.surface,
resizeToAvoidBottomInset: true,
bottomNavigationBar: _buildBottomNavigationBar(),
body: _buildListView(),
);
}

_buildBottomNavigationBar() {
return Container(
padding: EdgeInsets.symmetric(horizontal: 8.0),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.primary,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(40),
topRight: Radius.circular(40),
),
),
child: SafeArea(
child: ChatTextField(
controller: _userInputController,
sendMessageVoid: () async {
final prompt = _userInputController.text;

final userMessage = ChatMessageEntity(
content: prompt,
isUserMessage: true,
);
await _sendMessage(userMessage);
_userInputController.clear();

final answer = await _getAIAnswer(prompt);
await _sendMessage(answer);

_userInputController.clear();
},
),
),
);
}

_buildListView() {
return BlocBuilder(
builder: (context, state) {
if (state is DoneState) {
WidgetsBinding.instance
.addPostFrameCallback((_) => _scrollToBottom());

return ListView.builder(
controller: _scrollController,
itemCount: state.messageList.length,
itemBuilder: (context, index) => Message(
chatMessageEntity: ChatMessageEntity(
content: state.messageList[index].content,
isUserMessage: state.messageList[index].isUserMessage,
),
),
);
}

return SizedBox.shrink();
},
);
}
}

< /code>
Ich muss nur ListView -Scrollen wie beispielsweise Messenger oder was ist los. Ich habe versucht, _scrollController.position.maxScollextent + 500 zu verwenden, aber dies war leider nicht funktioniert.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post