Как объявить функцию в другом файле дротика и достичь основных переменных - PullRequest
0 голосов
/ 14 июля 2020

Это часть приложения flutter по умолчанию.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  /*
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }
  */
}

Это то, что я хочу сделать.

import 'package:fdgdfg/main.dart';

class Functions {
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }
}

Я хочу объявить функции в другом файле и из этого файла i хотите достичь и использовать переменные основного файла. Но я не могу использовать эти переменные, я не могу установить состояние .. Как я могу это сделать?

1 Ответ

0 голосов
/ 14 июля 2020

Как я сказал в своем комментарии, у вас, похоже, есть некоторые грубые неправильные представления о том, как работают Classes и импорт файлов. Я бы посоветовал вам посетить https://dart.dev и узнать немного больше о языке Dart.

Тем не менее, вот пример того, как вы можете создать class с methods в другом файле, импортируйте этот файл, создайте экземпляр класса и используйте его методы в своем основном class. Помните, что вы не можете запустить setState на обычном дротике class, как вы пытались. Это можно сделать только на class, который расширяет класс StatefulWidget Flutter.

import 'package:flutter/material.dart';
import 'package:my_app/my_functions.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  final MyMethods methods = MyMethods();
  
  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      child: Text('Say hello'),
      onPressed: () => methods.sayHello(),
    );
  }
}

my_functions.dart

class MyMethods {
  void sayHello(){
    print('Hello');
  }
}

Вам действительно стоит попытаться лучше понять, как работают methods, classes, context и StatefulWidgets, прежде чем двигаться вперед с созданием приложений Flutter.

...