Выдает MobXException, когда я обновляю состояние mobX и обновляюсь в Observer. - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь управлять состоянием mobX State для флаттера. Но всякий раз, когда я обновляю свое @ наблюдаемое состояние напрямую, а не вызываю @ декорированный метод действия , он выбрасывает 'MobXException'

Ниже код даст вам правильное представление.

counter.dart

import 'package:mobx/mobx.dart';

part 'counter.g.dart';

class Counter = CounterBase with _$Counter;

abstract class CounterBase implements Store {
  @observable
  int value = 0;

  @action
  void increment() {
    value++;
  }
}

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import './counter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Counter",
      home: CounterExample(),
    );
  }
}

class CounterExample extends StatelessWidget {
  final _counter = Counter();

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: const Text('Counter'),
        ),
        body: Center(
          child: Observer(
              builder: (_) => Text(
                    '${_counter.value}',
                    style: const TextStyle(fontSize: 50),
                  )),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            // _counter.increment(); // WORKING !!
            _counter.value = _counter.value+1; // NOT WORKING !!
          },
          tooltip: 'Increment',
          child: const Icon(Icons.add),
        ),
      );
}

Использование метода приращения работает, но почему даже для простого изменения состояния мне нужно сделать другой метод? почему сгенерированного сеттера недостаточно?

1 Ответ

2 голосов
/ 06 мая 2019

Но всякий раз, когда я обновляю свое состояние @observable напрямую, а не вызываю метод, оформленный @action, он выдает «MobXException»

Это особенность.MobX целенаправленно не позволяет вам изменять видимость за пределами действия .

Вместо этого перемещайте эту логику в метод вашего магазина.

...