Improve repo structure (#22)
* app updated * readme updated * rename base folder * update chatty's readme * move apps to packages dir * update repo overview Co-authored-by: diegoveloper <[email protected]>
This commit is contained in:
co-authored by
diegoveloper
parent
bd6bb66279
commit
030c3eb428
@@ -0,0 +1,139 @@
|
||||
import 'package:stream_chatter/navigator_utils.dart';
|
||||
import 'package:stream_chatter/ui/home/chat/chat_view.dart';
|
||||
import 'package:stream_chatter/ui/home/chat/selection/friends_selection_view.dart';
|
||||
import 'package:stream_chatter/ui/home/home_cubit.dart';
|
||||
import 'package:stream_chatter/ui/home/settings/settings_view.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
class HomeView extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Theme.of(context).canvasColor,
|
||||
body: BlocProvider(
|
||||
create: (_) => HomeCubit(),
|
||||
child: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: BlocBuilder<HomeCubit, int>(builder: (context, snapshot) {
|
||||
return IndexedStack(
|
||||
index: snapshot,
|
||||
children: [
|
||||
ChatView(),
|
||||
SettingsView(),
|
||||
],
|
||||
);
|
||||
}),
|
||||
),
|
||||
HomeNavigationBar(),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HomeNavigationBar extends StatelessWidget {
|
||||
const HomeNavigationBar({
|
||||
Key key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final cubit = BlocProvider.of<HomeCubit>(context, listen: true);
|
||||
final navigationBarSize = 80.0;
|
||||
final buttonSize = 56.0;
|
||||
final buttonMargin = 4.0;
|
||||
final topMargin = buttonSize / 2 + buttonMargin / 2;
|
||||
final canvasColor = Theme.of(context).canvasColor;
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 20.0),
|
||||
child: Material(
|
||||
child: Container(
|
||||
height: navigationBarSize + topMargin,
|
||||
width: MediaQuery.of(context).size.width * 0.7,
|
||||
color: canvasColor,
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
top: topMargin,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(25),
|
||||
color: Theme.of(context).bottomNavigationBarTheme.backgroundColor,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
_HomeNavItem(
|
||||
text: 'Chats',
|
||||
iconData: Icons.chat_bubble,
|
||||
onTap: () => cubit.onChangeTab(0),
|
||||
selected: cubit.state == 0,
|
||||
),
|
||||
_HomeNavItem(
|
||||
text: 'Settings',
|
||||
iconData: Icons.settings,
|
||||
onTap: () => cubit.onChangeTab(1),
|
||||
selected: cubit.state == 1,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: canvasColor,
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
padding: EdgeInsets.all(buttonMargin / 2),
|
||||
child: FloatingActionButton(
|
||||
onPressed: () {
|
||||
pushToPage(context, FriendsSelectionView());
|
||||
},
|
||||
child: Icon(Icons.add),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _HomeNavItem extends StatelessWidget {
|
||||
const _HomeNavItem({
|
||||
Key key,
|
||||
this.iconData,
|
||||
this.text,
|
||||
this.onTap,
|
||||
this.selected = false,
|
||||
}) : super(key: key);
|
||||
|
||||
final IconData iconData;
|
||||
final String text;
|
||||
final VoidCallback onTap;
|
||||
final bool selected;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final selectedColor = Theme.of(context).bottomNavigationBarTheme.selectedItemColor;
|
||||
final unselectedColor = Theme.of(context).bottomNavigationBarTheme.unselectedItemColor;
|
||||
final color = selected ? selectedColor : unselectedColor;
|
||||
return GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(iconData, color: color),
|
||||
Text(text, style: TextStyle(color: color)),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user