Открытие статьи с другой страницы с помощью блока - PullRequest
0 голосов
/ 27 мая 2020

Я новичок в флаттере 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 каждый раз?

...