Flutter - передача метода из одного виджета-брата в FloatingActionButton onPressed - PullRequest
0 голосов
/ 08 февраля 2020

Я новичок во Флаттере и Дарт - просто хочу узнать что-то новое. И при попытке установить первые шаги в написании простого todoApp возникла одна проблема.

Как я могу передать метод для вызова метода floatActionButton onPresset из StatefullWidget, который не инициализируется раньше, как в теле MaterialApp?

Вот мой код:

import 'package:flutter/material.dart';
void main() => runApp(new MaterialApp(
      title: 'SchePP',
      home: Scaffold(
        appBar: AppBar(
          title: Text('SchePP'),
        ),
        body: SchePP(),
        floatingActionButton: FloatingActionButton(
          onPressed: () => ,
          tooltip: 'Add new log',
          child: Icon(Icons.add),
        ),
      ),
    ));


class SchePP extends StatefulWidget {

  @override
  _SchePPState createState() => _SchePPState();
}

class _SchePPState extends State<SchePP> {
  List<String> listOfThings = ['Some thing done', 'Some other one'];

  void addThingToList() {
    this.listOfThings.add('New Thing to be done');
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: listOfThings.length,
      itemBuilder: (BuildContext context, int index) {
        return new Text(listOfThings[index]);
      });
  }
}

Чтобы указать, я хочу передать метод addThingToList из _SchePPState в onPressed.

Спасибо за любую помощь в совете:)

1 Ответ

0 голосов
/ 08 февраля 2020

Используйте глобальный доступ, так же как у main () есть Глобальный доступ

import 'package:flutter/material.dart';

 List<String> listOfThings = ['Some thing done', 'Some other one'];

  void addThingToList() {
    this.listOfThings.add('New Thing to be done');
  }

void main() => runApp(new MaterialApp(
      title: 'SchePP',
      home: Scaffold(
        appBar: AppBar(
          title: Text('SchePP'),
        ),
        body: SchePP(),
        floatingActionButton: FloatingActionButton(
          onPressed: () => addThingToList(),
          tooltip: 'Add new log',
          child: Icon(Icons.add),
        ),
      ),
    ));


class SchePP extends StatefulWidget {

  @override
  _SchePPState createState() => _SchePPState();
}

class _SchePPState extends State<SchePP> {

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: listOfThings.length,
      itemBuilder: (BuildContext context, int index) {
        return new Text(listOfThings[index]);
      });
  }
}
...