如何从Flutter中的其他Dart文件访问功能?

时间:2020-08-27 18:08:08

标签: flutter dart

这是我的HomePage.dart代码。在这里,我想从另一个名为“ randomwords.dart”的文件(附加代码以供查看)访问_pushSaved()函数到“ onpressed”属性中。似乎我需要在某个地方声明_pushSaved(),但没有任何想法,因为我是飞镖和飞镖的新手。如果有人可以帮助我,我会很感激。预先感谢。



class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("StartUp Name Generator"),
            actions: [
              IconButton(icon: Icon(Icons.list), **onPressed: _pushSaved**)
        ],
      ),
      body: RandomWords(),
    );
  }
}

randomwords.dart文件中的_pushSaved()函数代码需要在HomePage.dart中作为对象进行访问...

class RandomWords extends StatefulWidget {
  @override
  _RandomWordsState createState() => _RandomWordsState();
}

class _RandomWordsState extends State<RandomWords> {
  final _suggestions = <WordPair>[];
  final _saved = Set<WordPair>();
  final _biggerFont = TextStyle(fontSize: 20.0, color: Colors.pink);
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemBuilder: (context, i) {
        if (i.isOdd) return Divider();

        final index = i ~/ 2;
        if (index >= _suggestions.length) {
          _suggestions.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_suggestions[index]);
      },
    );
  }

  Widget _buildRow(WordPair pair) {
    final alreadySaved = _saved.contains(pair);
    return ListTile(
      title: Text(
        pair.asPascalCase,
        style: _biggerFont,
      ),
      trailing: Icon(
        alreadySaved ? Icons.favorite : Icons.favorite_border,
        color: alreadySaved ? Colors.red : null,
      ),
      onTap: () {
        setState(() {
          if (alreadySaved) {
            _saved.remove(pair);
          } else {
            _saved.add(pair);
          }
        });
      },
    );
  }

  void **_pushSaved()** {
    Navigator.of(context).push(
      MaterialPageRoute<void>(
        builder: (BuildContext context) {
          final tiles = _saved.map(
            (WordPair pair) {
              return ListTile(
                title: Text(
                  pair.asPascalCase,
                  style: _biggerFont,
                ),
              );
            },
          );

          final divided =
              ListTile.divideTiles(tiles: tiles, context: context).toList();

          return Scaffold(
            appBar: AppBar(
              title: Text("Saved Suggestions"),
            ),
            body: ListView(
              children: divided,
            ),
          );
        },
      ),
    );
  }
}

3 个答案:

答案 0 :(得分:1)

尽管上面的答案解决了您的问题,但这不是一个好习惯,请使用抽象类来定义应该在各个地方使用的函数。

答案 1 :(得分:0)

您的函数定义为私有属性。您需要先进行更改。

pushSaved()

第二,您需要将此函数定义为静态函数,以便在其他类中访问它。

static void pushSaved()

现在像下面这样在onPressed函数的HomePage类中调用函数:

onPressed: () => RandomWords.pushSaved

答案 2 :(得分:0)

像这样将HomePage.dart导入到主页文件中;

import 'package:main.dart' as main; //it doesn't have to be as 'main'

然后访问如下功能:

IconButton(icon: Icon(Icons.list),*onPressed: main._pushSaved)

注意:现在,当我完成这样的事情并且我的函数以_开头时,不幸的是它不起作用,我知道每个人都首先使用_进行了功能,但是显然地,它并没有这样做。从另一个文件导入时,对我不起作用。所以要当心。 此外,该功能必须在 _RandomWordsState 之外,其他文件才能访问。只需将其放在下面即可。