В Flutter, как передать данные в виджет без сохранения состояния? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь создать свое первое приложение Flutter и столкнулся с трудностями при передаче данных в виджеты без состояния.У меня есть следующие классы:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'App Title',
      theme: new ThemeData(
        primarySwatch: Colors.green,
      ),
      home: new MainBody(),
    );
  }
}


class MainBody extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Padding(
        padding: const EdgeInsets.only(left: 20.0, right: 20.0),
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new TimeCheck(),
          ],
        ),
      ),
    );
  }
}

TimeCheck это Stateful Widget.По сути, я хочу иметь возможность устанавливать некоторые значения в начале, а затем передавать их в TimeCheck через MainBody.Все, что я читаю, показывает, как передать данные в Stateful Widgets, но возможно ли передать их через Stateless Widget?

Я понимаю, что, возможно, выбрал неправильный подход, поэтому в случае, если это поможет,в конечном итоге мне бы хотелось иметь страницу «настроек», где пользователь может установить значения для данных (строку и некоторые числа), а затем эти значения будут переданы в TimeCheck, где они будут использоваться для генерации отображения.

Я также хотел бы иметь возможность сохранять установленные пользователем значения, если это возможно, чтобы им не приходилось вводить их каждый раз, а затем я хотел бы иметь возможность читать их вкогда создается экземпляр TimeCheck.

1 Ответ

1 голос
/ 20 сентября 2019

Да, вы можете сделать это, просто передав информацию конструктору.Как то так:

 class MyApp extends StatelessWidget {
  MyApp(this.yourData);

  final int yourData;
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'App Title',
      theme: new ThemeData(
        primarySwatch: Colors.green,
      ),
      home: new MainBody(yourData),
    );
  }
}


class MainBody extends StatelessWidget {
  MainBody(this.yourData);

  final int yourData;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Padding(
        padding: const EdgeInsets.only(left: 20.0, right: 20.0),
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new TimeCheck(yourData),
          ],
        ),
      ),
    );
  }
}
...