这是我的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,
),
);
},
),
);
}
}
答案 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 之外,其他文件才能访问。只需将其放在下面即可。