whatsapp_scroll_view 0.0.2 copy "whatsapp_scroll_view: ^0.0.2" to clipboard
whatsapp_scroll_view: ^0.0.2 copied to clipboard

A Flutter widget for WhatsApp-style reverse chat scrolling with auto-scroll and load-on-top.

example/lib/main.dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:whatsapp_scroll_view/whatsapp_scroll_view.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'WhatsApp Scroll Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.green),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Chat Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final List<String> messages = ['Hello!', 'How are you?'];
  final TextEditingController _controller = TextEditingController();
  Timer? messageSimulator;

  @override
  void initState() {
    super.initState();
    simulateIncomingMessages();
  }

  void simulateIncomingMessages() {
    messageSimulator = Timer.periodic(const Duration(seconds: 5), (timer) {
      setState(() {
        messages.insert(0, 'Incoming message @ ${_formattedTime()}');
      });
    });
  }

  void _sendMessage() {
    if (_controller.text
        .trim()
        .isEmpty) {
      return;
    }
    setState(() {
      messages.insert(0, _controller.text.trim());
      _controller.clear();
    });
  }

  String _formattedTime() {
    final now = DateTime.now();
    return "${now.hour.toString().padLeft(2, '0')}:${now.minute.toString()
        .padLeft(2, '0')}:${now.second.toString().padLeft(2, '0')}";
  }

  @override
  void dispose() {
    messageSimulator?.cancel();
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        backgroundColor: Theme
            .of(context)
            .colorScheme
            .inversePrimary,
      ),
      body: Column(
        children: [
          Expanded(
            child: WhatsAppScrollView(
              messages: messages
                  .map((msg) =>
                  Align(
                    alignment: Alignment.centerLeft,
                    child: Container(
                      margin:
                      const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
                      padding: const EdgeInsets.all(12),
                      decoration: BoxDecoration(
                        color: Colors.green.shade100,
                        borderRadius: BorderRadius.circular(10),
                      ),
                      child: Text(
                        msg,
                        style: const TextStyle(fontSize: 16),
                      ),
                    ),
                  ))
                  .toList(),
              onReachTop: () {
                debugPrint("User scrolled to top!");
              },
            ),
          ),
          const Divider(height: 1),
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 6),
            child: Row(
              children: [
                Expanded(
                  child: TextField(
                    controller: _controller,
                    decoration:
                    const InputDecoration(hintText: "Type a message..."),
                  ),
                ),
                IconButton(
                  icon: const Icon(Icons.send),
                  onPressed: _sendMessage,
                  color: Colors.green,
                )
              ],
            ),
          ),
        ],
      ),
    );
  }
}
4
likes
0
points
22
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter widget for WhatsApp-style reverse chat scrolling with auto-scroll and load-on-top.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on whatsapp_scroll_view