Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 堆栈小部件和Bloc Builder_Flutter_Dart_Bloc - Fatal编程技术网

Flutter 堆栈小部件和Bloc Builder

Flutter 堆栈小部件和Bloc Builder,flutter,dart,bloc,Flutter,Dart,Bloc,我知道Stack小部件从头开始渲染它们的子部件,但是,我无法向自己解释为什么BlocBuilder不能有效地重建它们 以下是一个例子: @override Widget build(BuildContext context) { return Container( child: BlocBuilder<TestCubit, int>( builder: (context, state) { return GestureDetector(

我知道
Stack
小部件从头开始渲染它们的子部件,但是,我无法向自己解释为什么
BlocBuilder
不能有效地重建它们

以下是一个例子:

@override
Widget build(BuildContext context) {
  return Container(
    child: BlocBuilder<TestCubit, int>(
      builder: (context, state) {
        return GestureDetector(
          onTapDown: (tapDetails) {
            context.read<TestCubit>().incrementCubit();
          },
          child: Stack(children: [Text('Counter: $state')]),
        );
      },
    )
  );
}
@覆盖
小部件构建(构建上下文){
返回容器(
孩子:BlocBuilder(
生成器:(上下文、状态){
返回手势检测器(
onTapDown:(点击详情){
context.read().incrementCubit();
},
子:堆栈(子:[Text('Counter:$state')]),
);
},
)
);
}
当调用
TestCubit
incrementCubit
方法时,状态会发生变化-我使用一个简单的基于
容器的UI对其进行了测试,但是一旦我们处理堆栈,屏幕上就不会发生任何事情。有什么想法吗


提前谢谢

我测试了您的代码,它既适用于堆栈,也适用于容器。请参阅下面我的代码:

主飞镖

导入“包装:颤振/材料.省道”;
进口“包装:颤振团/颤振团.飞镖”;
void main(){
runApp(
常量计数器应用(),
);
}
类计数器应用程序扩展了MaterialApp{
常量计数器应用程序({Key}):超级(Key:Key,home:const CounterPage());
}
类CounterPage扩展了无状态小部件{
常量计数器({Key}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回BlocProvider(
创建:()=>TestCubit(),
子对象:CounterView(),
);
}
}
类计数器视图扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(子项:BlocBuilder)(
生成器:(上下文、状态){
返回手势检测器(
onTapDown:(点击详情){
context.read().incrementCubit();
},
子:堆栈(子:[Text('Counter:$state')]),
//子项:文本('Counter:$state'),
//孩子:脚手架(
//appBar:appBar(标题:const Text(“Cubit Demo”),
//正文:中(
//子:堆栈(
//儿童:[
//Text('Counter:$state'),
//     ],
//   )),
//),
);
},
));
}
}
类TestCubit扩展了Cubit{
TestCubit():super(0);
void incrementCubit()=>emit(状态+1);
无效递减cubit()=>emit(状态-1);
}

公开发行

name:test\u http
描述:一个新的颤振应用。
发布到:“无”
版本:1.0.0+1
环境:

sdk:“>=2.7.0你好,蓝尼罗河,谢谢你看这个!你是对的,堆栈小部件不是问题所在。事实上,到目前为止,我设法进一步追踪到CustomPaint的问题,而CustomPaint在我的实际用例中似乎没有重建。听起来熟悉吗?。。。结果是CustomPainter的ShouldRepaint覆盖设置为false。。。愚蠢的错误我知道:)再次感谢!如果答案有助于您解决问题,请接受。谢谢
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

void main() {
  runApp(
    const CounterApp(),
  );
}

class CounterApp extends MaterialApp {
  const CounterApp({Key key}) : super(key: key, home: const CounterPage());
}

class CounterPage extends StatelessWidget {
  const CounterPage({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (_) => TestCubit(),
      child: CounterView(),
    );
  }
}

class CounterView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(child: BlocBuilder<TestCubit, int>(
      builder: (context, state) {
        return GestureDetector(
          onTapDown: (tapDetails) {
            context.read<TestCubit>().incrementCubit();
          },
          child: Stack(children: [Text('Counter: $state')]),
          //child: Text('Counter: $state'),
          //child: Scaffold(
          //   appBar: AppBar(title: const Text("Cubit Demo")),
          //   body: Center(
          //       child: Stack(
          //     children: [
          //       Text('Counter: $state'),
          //     ],
          //   )),
          //),
        );
      },
    ));
  }
}

class TestCubit extends Cubit<int> {
  TestCubit() : super(0);
  void incrementCubit() => emit(state + 1);
  void decrementCubit() => emit(state - 1);
}
name: test_http
description: A new Flutter application.

publish_to: 'none'

version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  flutter_bloc:

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true