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

Chat package that has complete chatting functionality using Firebase.

example/lib/main.dart

import 'package:example/screens/chat.room.list.screen.dart';
import 'package:example/screens/chat.room.screen.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firechat/chat.test.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Firechat Demo Login Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String a = '7kYRMUhRJGPV47u2hCDrauoHSMk1';
  final String b = '4MB8M3mbLlQ9J70Mbp5BW5p3fnD2';
  final String c = 'yUzkXHvNPTVgYiE21rn78aWURZF3';
  final String d = 'FvLmXDDpUkfYvHlLnm61KuEDpGC2';
  final String aEmail = 'aaaa@test.com';
  final String bEmail = 'bbbb@test.com';
  final String cEmail = 'cccc@test.com';
  final String dEmail = 'dddd@test.com';
  final String password = '12345a';

  @override
  void initState() {
    super.initState();
    Firebase.initializeApp().then((x) {
      // FireChatTest().runAllTests();
      // FireChatTest().chatWithMyself();
      // FireChatTest().sendMessageTestA();
      // FireChatTest().sendMessageTestB();
      // FireChatTest().leaveTest();
      // FireChatTest().userInvitationTest();
      // FireChatTest().addModeratorTest();
      // FireChatTest().removeModeratorTest();
      // FireChatTest().blockTest();
      // FireChatTest().kickoutTest();

      // () async {
      //   try {
      //     await FirebaseAuth.instance.signInWithEmailAndPassword(email: aEmail, password: password);
      //     await FirebaseAuth.instance.currentUser.updateProfile(displayName: 'A');
      //     await FirebaseAuth.instance.signInWithEmailAndPassword(email: bEmail, password: password);
      //     await FirebaseAuth.instance.currentUser.updateProfile(displayName: 'B');
      //     await FirebaseAuth.instance.signInWithEmailAndPassword(email: cEmail, password: password);
      //     await FirebaseAuth.instance.currentUser.updateProfile(displayName: 'C');
      //     await FirebaseAuth.instance.signInWithEmailAndPassword(email: dEmail, password: password);
      //     await FirebaseAuth.instance.currentUser.updateProfile(displayName: 'D');
      //   } catch (e) {
      //     print(e);
      //   }
      // }();
    });
  }

  @override
  Widget build(BuildContext context) {
    final user = FirebaseAuth.instance.currentUser;
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          // mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Firechat Functionality\n'
              '- [Done] 1:1 chat with same room\n'
              '- 1:1 chat with new room\n'
              '- Multi user chat with same room\n'
              '- Multi user chat with new room\n'
              '- Room information (like title) change.\n'
              '- User invitation\n'
              '- Kicking out a user\n'
              '- [Done] Block a user\n'
              '- Set a user as admin\n'
              '- When admin leave the room, one of other user automatically becomes admin\n'
              '- [Done] Listening changes of room list and showing new messages.'
              '- Room password lock\n',
            ),
            Text(
              'User Signed in as '
              '${user?.displayName}'
              "-${user?.uid}",
            ),
            TextButton(
              onPressed: () async {
                await FirebaseAuth.instance
                    .signInWithEmailAndPassword(email: aEmail, password: password);
                setState(() {});
              },
              child: Text('Login as UserA'),
            ),
            TextButton(
              onPressed: () async {
                await FirebaseAuth.instance
                    .signInWithEmailAndPassword(email: bEmail, password: password);
                setState(() {});
              },
              child: Text('Login as UserB'),
            ),
            TextButton(
              onPressed: () async {
                await FirebaseAuth.instance
                    .signInWithEmailAndPassword(email: cEmail, password: password);
                setState(() {});
              },
              child: Text('Login as UserC'),
            ),
            TextButton(
              onPressed: () async {
                await FirebaseAuth.instance
                    .signInWithEmailAndPassword(email: dEmail, password: password);
                setState(() {});
              },
              child: Text('Login as UserD'),
            ),
            TextButton(
              onPressed: () async {
                Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => ChatRoomScreen(uid: a, displayName: 'User A'),
                    ));
              },
              child: Text('Chat User A'),
            ),
            TextButton(
              onPressed: () async {
                Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => ChatRoomScreen(uid: b, displayName: 'User B'),
                    ));
              },
              child: Text('Chat User B'),
            ),
            TextButton(
              onPressed: () async {
                Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => ChatRoomListScreen(),
                    ));
              },
              child: Text('My Room list'),
            ),
            TextButton(
              onPressed: () async {
                await FirebaseAuth.instance.signOut();
                setState(() {});
              },
              child: Text('Log Out'),
            )
          ],
        ),
      ),
    );
  }
}