代码之家  ›  专栏  ›  技术社区  ›  Nikita

Flutter中的重用方法

  •  0
  • Nikita  · 技术社区  · 2 年前

    所以这听起来像是一个愚蠢的问题,但我不明白。我有一个控制器类,它有一个方法

        import 'package:firebase_auth/firebase_auth.dart';
    import 'package:flutter/material.dart';
    
    import '../utils.dart';
    
    class UserController {
      Future signMeIn(TextEditingController emailController,
          TextEditingController passwordController, context, navigatorKey) async {
        showDialog(
            context: context,
            barrierDismissible: false,
            builder: (context) => Center(
                  child: CircularProgressIndicator(),
                ));
        try {
          await FirebaseAuth.instance.signInWithEmailAndPassword(
              email: emailController.text.trim(),
              password: passwordController.text.trim());
        } on FirebaseAuthException catch (e) {
          print(e);
    
          Utils.showSnackBar(e.message);
        }
    
        navigatorKey.currentState!.popUntil((route) => route.isFirst);
      }
    }
    

    我只是想在一个有状态的小部件中重用这个方法

    所以我正在导入定义方法的文件

    import "user_controller.dart";
    

    试着把它叫做这里

    ElevatedButton.icon(
                style: ElevatedButton.styleFrom(minimumSize: Size.fromHeight(50)),
                icon: Icon(Icons.lock_open, size: 32),
                label: Text(
                  "Sign In",
                  style: TextStyle(fontSize: 24),
                ),
                onPressed: signMeIn(parameters),
              ),
    

    但我得到的错误是它没有定义 我做错了什么?

    2 回复  |  直到 2 年前
        1
  •  1
  •   stacktrace2234    2 年前
    UserController controller = UserController();
    
    ElevatedButton.icon(
                style: ElevatedButton.styleFrom(minimumSize: Size.fromHeight(50)),
                icon: Icon(Icons.lock_open, size: 32),
                label: Text(
                  "Sign In",
                  style: TextStyle(fontSize: 24),
                ),
                onPressed: controller.signMeIn(parameters),
              ),
    
        2
  •  1
  •   Samuel Luis dos Santos    2 年前

    当你在使用之前创建一个类时,你必须实例化它。这意味着“在内存中分配一个位置”。所以,你必须这样打电话:

    UserController UserController=UserController();

    • 名称控制器可以是您想要的任何名称。