Flutter-从同级小部件传递到floatActionButton onPressed的方法

问题描述 投票:0回答:1

我是Flutter和Dart的新手,只是想了解新知识。在尝试设置编写简单todoApp的第一步时,出现了一个问题。

如何传递方法以从之前未在MaterialApp主体中初始化的StatefullWidget调用floatActionButton onPresset方法?

这是我的代码:

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。

感谢您的建议:)

android flutter mobile dart parameter-passing
1个回答
0
投票

使用全局访问,就像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]);
      });
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.