颤振没有更新肘部状态

Posted

技术标签:

【中文标题】颤振没有更新肘部状态【英文标题】:Flutter is not updating cubit state 【发布时间】:2021-06-01 00:15:31 【问题描述】:

我正在练习 BloC cubit,它没有更新状态。这是我的主要文件。我使用 BlocProvider 来创建实例,使用 BlocBuilder 来呈现状态,但是每当我点击增量和减量时,它都不会重新呈现文本小部件。

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

void main() 
  runApp(MyApp());


class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'bloc counter app',
      theme: ThemeData(primarySwatch: Colors.red),
      home: HomePage(),
    );
  


class HomePage extends StatefulWidget 
  @override
  _HomePageState createState() => _HomePageState();


class _HomePageState extends State<HomePage> 
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text('Bloc Counter App'),
      ),
      body: BlocProvider<CounterCubit>(
        create: (context) => CounterCubit(),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            BlocBuilder<CounterCubit, CounterState>(builder: (context, state) 
              return Text(
                state.counterValue.toString(),
                style: TextStyle(
                  fontSize: 20.0,
                ),
              );
            ),
            SizedBox(
              height: 50.0,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                FloatingActionButton(
                    tooltip: 'Increment',
                    child: Icon(Icons.add),
                    onPressed: () 
                      BlocProvider.of<CounterCubit>(context).increment();
                    ),
                FloatingActionButton(
                    tooltip: 'decrement',
                    child: Icon(Icons.remove),
                    onPressed: () =>
                        BlocProvider.of<CounterCubit>(context).decrement())
              ],
            )
          ],
        ),
      ),
    );
  

这是我的反肘文件

导入'package:bloc/bloc.dart'; 导入'package:meta/meta.dart';

part 'counter_state.dart';

class CounterCubit extends Cubit<CounterState> 
  CounterCubit() : super(CounterState(counterValue: 0));

  void increment() => emit(CounterState(counterValue: state.counterValue + 1));

  void decrement() => emit(CounterState(counterValue: state.counterValue - 1));

这是我的计数器状态文件

part of 'counter_cubit.dart';



class CounterState 
  int counterValue;

  CounterState(@required this.counterValue);

【问题讨论】:

【参考方案1】:

在按钮的回调中,您试图通过提供肘位的相同上下文来获取肘位。创建一个单独的小部件或使用Builder 包装子组件。更多信息here。

【讨论】:

谢谢我已经通过用 BuildProvider 包装 MaterialApp() 解决了这个问题,它完美地工作

以上是关于颤振没有更新肘部状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中忽略肘部的状态?

补丁/更新后不与提供者更新状态,颤振

列表项的颤振状态更新

颤振状态不会更新

在颤振中从父小部件调用 setState 不会更新状态

在有状态小部件外部调用方法以使用颤振 Bloc 更新 UI