ребята, я начинаю с флаттера, и я решил сделать мини-игру типа "повар ie кликер", чтобы тренироваться, но я только что столкнулся с проблемой с управлением состоянием ...
Я использую провайдера для распространения «GameController», который предназначен для обновления ресурсов игрока и выполнения расчетов.
Мне удается получить «GameController» везде, но когда я взаимодействую с ресурсом (объектом в GameController "), и он обновлен, но не в пользовательском интерфейсе, он не меняется ...
main.dart:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'controllers/GameController.dart';
void main() => runApp(MokaOnline());
class MokaOnline extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => GameController()),
],
child: MokaOnlineApp(),
);
}
}
class MokaOnlineApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MokaOnline',
home: Test(),
);
}
}
class Test extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<GameController>(
builder: (context, gameControler, _) {
final _mokaResource =
gameControler.essentialResourceController.mokaResource;
return Container(
child: Column(
children: <Widget>[
Text('Moka : ${_mokaResource.getResource()}'),
FlatButton(
onPressed: () {
_mokaResource.increment();
},
child: Text('Add Moka'),
)
],
),
);
},
);
}
}
GameController.dart:
import 'package:flutter/foundation.dart';
import 'package:mokaonline/controllers/EssentialResourceController.dart';
class GameController {
EssentialResourceController _essentialResourceController =
EssentialResourceController();
EssentialResourceController get essentialResourceController =>
_essentialResourceController;
}
EssentialResourceController.dart:
import 'package:mokaonline/models/essentialResources/MokaResourceModel.dart';
import 'package:mokaonline/models/essentialResources/ResourceEssentialInterface.dart';
class EssentialResourceController {
ResourceEssentialInterface _mokaResource = MokaResourceModel();
ResourceEssentialInterface get mokaResource => _mokaResource;
}
MokaResourceModel.dart:
import 'package:flutter/foundation.dart';
import 'package:mokaonline/models/essentialResources/ResourceEssentialInterface.dart';
class MokaResourceModel extends ChangeNotifier
implements ResourceEssentialInterface {
int _moka = 0;
void increment() {
_moka++;
notifyListeners();
}
@override
int getResource() {
return _moka;
}
}
Я понял, что пользовательский интерфейс не был refre sh, потому что это не совсем GameController "Это обновлено ... Но я не вижу, как иначе структурировать код.
В любом случае, спасибо за вашего пациента и хорошего дня!