如何在扑扑中获得其他班级的职能?

时间:2019-04-05 02:45:52

标签: dart flutter

我需要获取其他类(​​在状态类中)的功能,我的代码在第一类中:

import 'package:flutter/material.dart';

class Search extends StatefulWidget {
  final Widget child;
  Search({Key key, this.child}) : super(key: key);
  _SearchState createState() => _SearchState();
}

class _SearchState extends State<Search> {
   _title(){
      return 'Lorem Ipsum Title';
   }

   @override
   Widget build(BuildContext context) {
      //...
   }
}

然后上第二堂课:

import 'package:flutter/material.dart';
import 'partials/search.dart';

class Second extends StatelessWidget {
  final Widget child;
  Second({Key key, this.child}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // I need import functions here, so I can use it on Scaffold

    new Search();

    return Scaffold(
      appBar: new AppBar(
          backgroundColor: Colors.blueAccent,
          titleSpacing: 15,
          title: _title() // like this
        ),
      ...
  }
}

但是调用函数时出现错误,请帮忙,谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用 Static 方法,也可以仅在类 Search 的实例上调用该方法,并且按照惯例 _ 仅用于命名本地方法/变量,只能由包装类使用。

  

示例1

    class _SearchState extends State<Search> {
      String title(){
      return 'Lorem Ipsum Title';
     }

    class Second extends StatelessWidget {
    ...
      @override
      Widget build(BuildContext context) {
        Search _search = Search();
        return Scaffold(
          appBar: new AppBar(
              backgroundColor: Colors.blueAccent,
              titleSpacing: 15,
            title: _search.title() // like this
                        ),
       //...
      )} 
  }
  

示例2

class _SearchState extends State<Search> {
   Static String title(){
      return 'Lorem Ipsum Title';
   }

   @override
   Widget build(BuildContext context) {
      //...
   }
}

class Second extends StatelessWidget {
//...
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: new AppBar(
          backgroundColor: Colors.blueAccent,
          titleSpacing: 15,
          title: Search.title() // like this
        ),
     // ...
  }
}

答案 1 :(得分:0)

在Dart中,您可以使用functionsObject并将其像参数一样发送,以便构造函数将其发送并在第二个类中使用。

Here是关于我所说内容的文档。

但是您不能使用(_),因为这将隐藏方法(它将变为私有),因此首先需要删除该方法,以便您能够以这种方式使用它。

现在您需要定义,该方法将在其他地方使用,因此您可以创建一个类并将其导入到您将要使用的任何位置。

结论: 首先需要知道该方法的用途,然后再实现更好的方法。