Flutter 颤振整体孔型参数

Flutter 颤振整体孔型参数,flutter,flutter-bloc,Flutter,Flutter Bloc,我正试图按照bloc模式将参数传递给bloc事件,我找到了本文,但是我的dart文档找不到分派(事件)方法 如何将参数传递给这样的对象 main.dart 这很有效 _counterBloc.add(Counter.increment); 但事实并非如此 _counterBloc.add(Counter.increment(3)); 集团省道 import'包:bloc/bloc.dart'; 枚举计数器事件{increment} 类CounterBloc扩展了Bloc{ @凌驾 int

我正试图按照bloc模式将参数传递给bloc事件,我找到了本文,但是我的dart文档找不到
分派
(事件)方法

如何将参数传递给这样的对象

main.dart

这很有效

_counterBloc.add(Counter.increment); 
但事实并非如此

_counterBloc.add(Counter.increment(3));
集团省道

import'包:bloc/bloc.dart';
枚举计数器事件{increment}
类CounterBloc扩展了Bloc{
@凌驾
int get initialState=>0;
@凌驾
流mapEventToState(计数器事件)异步*{
开关(事件){
case CounterEvents.increment:
印刷(活动);
屈服状态+1;
打破
}
}
}

如果您试图使用bloc模式重建计数器应用程序, 仔细阅读这篇文章,这可能会有所帮助


如果您试图使用bloc模式重建计数器应用程序, 仔细阅读这篇文章,这可能会有所帮助


您应该像下面这样编写CounterEvent:

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

enum EventStatus { INCREMENT, DECREMENT }

class CounterEvent {
  final int value;
  final EventStatus status;

  const CounterEvent({@required this.value, @required this.status});
}

class CounterBLoC extends Bloc<CounterEvent, int> {
  @override
  int get initialState => 0;

  @override
  Stream<int> mapEventToState(event) async* {
    if (event.status == EventStatus.INCREMENT) {
      yield state + event.value;
    } else if (event.status == EventStatus.DECREMENT) {
      yield state - event.value;
    }
  }
}
@override
  Widget build(BuildContext context) {
    final counterBloc = BlocProvider.of<CounterBLoC>(context);
    return Scaffold(
      body: Center(
        child: BlocBuilder<CounterBLoC, int>(
          builder: (ctx, state) {
            return Text(
              'count: $state',
              style: TextStyle(fontSize: 28),
            );
          },
        ),
      ),
      floatingActionButton: Align(
        alignment: Alignment.bottomRight,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.INCREMENT));
              },
              child: Icon(Icons.add_circle),
            ),
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.DECREMENT));
              },
              child: Icon(Icons.remove_circle),
            ),
          ],
        ),
      ),
    );
  }
导入“包装:颤振/材料.省道”;
进口“包装:颤振团/颤振团.飞镖”;
枚举事件状态{递增,递减}
班级对抗赛{
最终整数值;
最终事件状态状态;
常量计数器事件({@required this.value,@required this.status});
}
类CounterBLoC扩展了Bloc{
@凌驾
int get initialState=>0;
@凌驾
流mapEventToState(事件)异步*{
if(event.status==EventStatus.INCREMENT){
屈服状态+事件值;
}else if(event.status==EventStatus.DECREMENT){
屈服状态-事件值;
}
}
}
并在小部件中使用它们,如下所示:

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

enum EventStatus { INCREMENT, DECREMENT }

class CounterEvent {
  final int value;
  final EventStatus status;

  const CounterEvent({@required this.value, @required this.status});
}

class CounterBLoC extends Bloc<CounterEvent, int> {
  @override
  int get initialState => 0;

  @override
  Stream<int> mapEventToState(event) async* {
    if (event.status == EventStatus.INCREMENT) {
      yield state + event.value;
    } else if (event.status == EventStatus.DECREMENT) {
      yield state - event.value;
    }
  }
}
@override
  Widget build(BuildContext context) {
    final counterBloc = BlocProvider.of<CounterBLoC>(context);
    return Scaffold(
      body: Center(
        child: BlocBuilder<CounterBLoC, int>(
          builder: (ctx, state) {
            return Text(
              'count: $state',
              style: TextStyle(fontSize: 28),
            );
          },
        ),
      ),
      floatingActionButton: Align(
        alignment: Alignment.bottomRight,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.INCREMENT));
              },
              child: Icon(Icons.add_circle),
            ),
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.DECREMENT));
              },
              child: Icon(Icons.remove_circle),
            ),
          ],
        ),
      ),
    );
  }
@覆盖
小部件构建(构建上下文){
final counterBloc=BlocProvider.of(上下文);
返回脚手架(
正文:中(
孩子:BlocBuilder(
建造商:(ctx,州){
返回文本(
'计数:'状态',
样式:TextStyle(字体大小:28),
);
},
),
),
浮动操作按钮:对齐(
对齐:对齐。右下角,
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
浮动操作按钮(
已按下:(){
反集团
.add(CounterEvent(值:5,状态:EventStatus.INCREMENT));
},
子:图标(图标。添加_圈),
),
浮动操作按钮(
已按下:(){
反集团
.add(计数器事件(值:5,状态:EventStatus.DECREMENT));
},
子:图标(图标。删除_圈),
),
],
),
),
);
}
确保在main中初始化您的bloc:


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,
      ),
      home: BlocProvider<CounterBLoC>(
        create: (ctx) => CounterBLoC(),
        child: TestBlocWidget(),
      ),
    );
  }
}

类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
首页:BlocProvider(
create:(ctx)=>CounterBLoC(),
子项:TestBlocWidget(),
),
);
}
}

您应该像下面这样编写CounterEvent:

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

enum EventStatus { INCREMENT, DECREMENT }

class CounterEvent {
  final int value;
  final EventStatus status;

  const CounterEvent({@required this.value, @required this.status});
}

class CounterBLoC extends Bloc<CounterEvent, int> {
  @override
  int get initialState => 0;

  @override
  Stream<int> mapEventToState(event) async* {
    if (event.status == EventStatus.INCREMENT) {
      yield state + event.value;
    } else if (event.status == EventStatus.DECREMENT) {
      yield state - event.value;
    }
  }
}
@override
  Widget build(BuildContext context) {
    final counterBloc = BlocProvider.of<CounterBLoC>(context);
    return Scaffold(
      body: Center(
        child: BlocBuilder<CounterBLoC, int>(
          builder: (ctx, state) {
            return Text(
              'count: $state',
              style: TextStyle(fontSize: 28),
            );
          },
        ),
      ),
      floatingActionButton: Align(
        alignment: Alignment.bottomRight,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.INCREMENT));
              },
              child: Icon(Icons.add_circle),
            ),
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.DECREMENT));
              },
              child: Icon(Icons.remove_circle),
            ),
          ],
        ),
      ),
    );
  }
导入“包装:颤振/材料.省道”;
进口“包装:颤振团/颤振团.飞镖”;
枚举事件状态{递增,递减}
班级对抗赛{
最终整数值;
最终事件状态状态;
常量计数器事件({@required this.value,@required this.status});
}
类CounterBLoC扩展了Bloc{
@凌驾
int get initialState=>0;
@凌驾
流mapEventToState(事件)异步*{
if(event.status==EventStatus.INCREMENT){
屈服状态+事件值;
}else if(event.status==EventStatus.DECREMENT){
屈服状态-事件值;
}
}
}
并在小部件中使用它们,如下所示:

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

enum EventStatus { INCREMENT, DECREMENT }

class CounterEvent {
  final int value;
  final EventStatus status;

  const CounterEvent({@required this.value, @required this.status});
}

class CounterBLoC extends Bloc<CounterEvent, int> {
  @override
  int get initialState => 0;

  @override
  Stream<int> mapEventToState(event) async* {
    if (event.status == EventStatus.INCREMENT) {
      yield state + event.value;
    } else if (event.status == EventStatus.DECREMENT) {
      yield state - event.value;
    }
  }
}
@override
  Widget build(BuildContext context) {
    final counterBloc = BlocProvider.of<CounterBLoC>(context);
    return Scaffold(
      body: Center(
        child: BlocBuilder<CounterBLoC, int>(
          builder: (ctx, state) {
            return Text(
              'count: $state',
              style: TextStyle(fontSize: 28),
            );
          },
        ),
      ),
      floatingActionButton: Align(
        alignment: Alignment.bottomRight,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.INCREMENT));
              },
              child: Icon(Icons.add_circle),
            ),
            FloatingActionButton(
              onPressed: () {
                counterBloc
                    .add(CounterEvent(value: 5, status: EventStatus.DECREMENT));
              },
              child: Icon(Icons.remove_circle),
            ),
          ],
        ),
      ),
    );
  }
@覆盖
小部件构建(构建上下文){
final counterBloc=BlocProvider.of(上下文);
返回脚手架(
正文:中(
孩子:BlocBuilder(
建造商:(ctx,州){
返回文本(
'计数:'状态',
样式:TextStyle(字体大小:28),
);
},
),
),
浮动操作按钮:对齐(
对齐:对齐。右下角,
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
浮动操作按钮(
已按下:(){
反集团
.add(CounterEvent(值:5,状态:EventStatus.INCREMENT));
},
子:图标(图标。添加_圈),
),
浮动操作按钮(
已按下:(){
反集团
.add(计数器事件(值:5,状态:EventStatus.DECREMENT));
},
子:图标(图标。删除_圈),
),
],
),
),
);
}
确保在main中初始化您的bloc:


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,
      ),
      home: BlocProvider<CounterBLoC>(
        create: (ctx) => CounterBLoC(),
        child: TestBlocWidget(),
      ),
    );
  }
}

类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
首页:BlocProvider(
create:(ctx)=>CounterBLoC(),
子项:TestBlocWidget(),
),
);
}
}

考虑制作自定义事件。您的解决方案应该是这样的(没有检查bug,但是范例是正确的):

那么在你的阵营里:

class CounterBloc extends Bloc<CounterEvent, int> {
  @override
  int get initialState => 0;

  @override
  Stream<int> mapEventToState(CounterEvent event) async* {
    if (event is Increment) {
       yield state + event.amount;
    }
  }
}
class CounterBloc扩展了Bloc{
@凌驾
int get initialState=>0;
@凌驾
流mapEventToState(计数器事件)异步*{
如果(事件为增量){
收益状态+事件金额;
}
}
}

考虑制作自定义事件。您的解决方案应该是这样的(没有检查bug,但是范例是正确的):

那么在你的阵营里:

class CounterBloc extends Bloc<CounterEvent, int> {
  @override
  int get initialState => 0;

  @override
  Stream<int> mapEventToState(CounterEvent event) async* {
    if (event is Increment) {
       yield state + event.amount;
    }
  }
}
class CounterBloc扩展了Bloc{