Я новичок в флаттере 1- У меня blo c.
abstract class HomeClickEvent {}
class NewClientEvent extends HomeClickEvent{}
class NewOrderEvent extends HomeClickEvent{}
class OpenCatalogEvent extends HomeClickEvent{}
abstract class HomeClickState{}
class LoadingState extends HomeClickState{}
class NewClientState extends HomeClickState{}
class NewOrderState extends HomeClickState{}
class CatalogState extends HomeClickState{}
class HomeClickBloc extends Bloc<HomeClickEvent,HomeClickState>{
@override
HomeClickState get initialState => LoadingState();
@override
Stream<HomeClickState> mapEventToState(HomeClickEvent event) async*{
if(event is NewClientEvent){
yield NewClientState();
}else if (event is NewOrderEvent){
yield NewOrderState();
}else if(event is OpenCatalogEvent) {
yield CatalogState();
}else {
yield LoadingState();
}
}
}
2- I have main.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<HomeClickBloc>(create: (context) => HomeClickBloc(),),
],
child: MaterialApp(
title: 'Don agent',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: HomePage(),
),
);
}
}
3- i have HomePage.dart with btns
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final bloc = BlocProvider.of<HomeClickBloc>(context);
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("${CONSTANTS.APP_TITLE}"),
),
body: ListView(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
InkWell(
onTap: (){
bloc.add(NewClientEvent());
},
child: buildButton("Новый клиент",Icons.add)
),
buildButton("Новый заказ",Icons.add_circle),
buildButton("Каталог товаров",Icons.scatter_plot),
],
)
],
),
);
}
Widget buildButton(String title,IconData icon){
return InkWell(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Icon(icon,size: 50.0,),
Text("$title"),
],
),
);
}
}
А теперь сам вопрос. 1- Я добавляю событие, чтобы открыть клиентскую форму. а как открыть форму? Мне нужно создать отдельный виджет, чтобы он кидал? //bloc.add (NewClientEvent ()); . Мне нужно открыть клиентскую форму с blo c. 2 - // buildButton (String title, // Значок IconData). Как мне использовать эту конкретную кнопку для всех моих кнопок в этом виджете. чтобы не создавать // InkWell каждый раз?