我正在学习 Mobx Flutter,并且希望有一个观察者显示类中字段的修改。
当使用 int 而不是自定义类时,它可以工作。 所以我怀疑我没有正确声明商店中的类(class)
这是我商店的代码
import 'package:mobx/mobx.dart';
// generated file
part 'bikeModel.g.dart';
class Cell {
String description;
String value;
String unit;
Cell({this.description, this.value, this.unit});
}
class BikeData = _BikeData with _$BikeData;
abstract class _BikeData with Store {
Timer _timerSimu;
@observable
int cadence = 0;
@observable
Cell cello = Cell(description: 'desc', value: 'oo', unit: 'km/h');
@action
startSimul() {
int _tick = 0;
cadence++;
cello.value = cadence.toString();
_timerSimu = Timer.periodic(Duration(seconds: 1), (timer) {
print('Screen simu is ticking...$_tick');
_tick++;
cadence++;
});
}
@action
stopSimu() {
_timerSimu.cancel();
}
}
这是主要代码
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx_first/bikeModel.dart';
import 'globals.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MobX',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage();
@override
Widget build(BuildContext context) {
BikeData store = BikeData();
return GestureDetector(
onPanUpdate: (details) {
if (details.delta.dx > 0) {
// Right swipe
print('this is a right swipe');
} else {
// left swipe
print('this is a left swipe');
}
},
child: Scaffold(
appBar: AppBar(
title: Text('MobX Test'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Observer(
builder: (_) => Text('cello.value ${store.cello.value}')),
Observer(builder: (_) => Text('cadence ${store.cadence}')),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: store.startSimul,
tooltip: 'Change',
child: Icon(Icons.add),
),
),
);
}
}
节奏正在改变屏幕上的所有内容,但不改变 cello.value
声明大提琴可观察的正确方法是什么?
最佳答案
问题是您只是更改对象 item(value) 的值。你必须完全改变对象,然后只有 mobx find 值改变。
替换以下行
cello.value = cadence.toString();
使用以下代码:
cello = Cell(
description: cello.description,
value: cadence.toString(),
unit: cello.unit);
关于flutter - 如何在 Mobx flutter 中声明 observable 以在类的字段更改时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61438788/