Потребитель ChangeNotifierProvider всегда равен нулю - PullRequest
0 голосов
/ 02 февраля 2020

Экземпляр Machinemodel от Consumer всегда равен нулю.

Почему?

Приложение

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Provider nested model demo',
        theme: ThemeData(
          // This is the theme of your application.
          primarySwatch: Colors.blue,
        ),
        home: ApplicationPage());
  }
}

ApplicationPage

 class ApplicationPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
       var newMachineEntity = new MachineEntity(1, "Power x1000"); //, engines);

        return Scaffold(
            appBar: AppBar(title: Text("Machine demo"), elevation: 6),
            body: ChangeNotifierProvider(create: (context) => new MachineModel(newMachineEntity), child: MachineWidget()));
      }
    }

Виджет

class MachineWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<MachineModel>(builder: (context, machine, child) {

                            ////////////////////// machine instance is null /////////////

      return Container(
        child: Column( 
          children: <Widget>[
            TextFormField(
              initialValue: machine.name,
              onChanged: (value) => machine.name = value,
            ), 
          ],
        ),
      );
    });
  }
}

Модель

class MachineModel extends ChangeNotifier {
  MachineEntity machineEntity;
  // List<EngineModel> engines;
  MachineModel(this.machineEntity) {
    //  engines = this.machineEntity.engines.map((eng) => new EngineModel(eng)).toList();
  }

  String get name => machineEntity.name;
  set name(String value) {
    machineEntity.name = value;
    notifyListeners();
  }
}

Сущность

class MachineEntity {
  int id;
  String name;
  // List<EngineEntity> engines;
  MachineEntity(this.id, this.name); //, this.engines);
}
...