Ошибка при колебании модели в области видимости, NosuchMethodError при попытке вызвать функцию из модели - PullRequest
0 голосов
/ 02 мая 2019

У меня есть приложение с различными функциями, теперь я хочу добавить их все вместе, и я использую scoped-модель . У меня есть класс с именем user, и у меня есть некоторые переменные и функция для выполнения http-запроса (с именем пользователя + паролем). У меня возникает ошибка всякий раз, когда я использую функцию входа в систему, которая заключается в следующем. > ##[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: NoSuchMethodError: The getter 'currentState' was called on null.##

Я пробовал разные вещи, и у меня нет геттера в моей модели, я не думаю, что это так, и я вижу только геттеры с закрытыми переменными. Функция работает, если я помещаю переменные и функцию также в файл main.dart. Класс пользователя

User.Dart
class User extends Model {

String url = "url" 

Future<String> submit() async {

    { var response =
          await http.post(Uri.encodeFull(url), body: json.encode({}), headers: {
        "content-type": "application/json",
        "Accept": "application/json",
        "Authorization": **encrypted username+password**
      });



  if (responsemessage == "OK") {
        print('token is goed $token');

} else {
        print('token is fout');
      }
      notifyListeners();
    }

А вот мой код в файле main.dart,

Main.dart        

import 'package:flutter/material.dart';
import 'package:scoped_model/scoped_model.dart';
import 'package:test_models/model/user.dart';

void main() => runApp(MyApp(user: User()));

class MyApp extends StatelessWidget {
  final User user;

  const MyApp({Key key, this.user}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ScopedModel<User>(
      model: user,
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(title: 'Flutter Demo Home Page'),
      ),
    );
  }
}


class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final formKey = GlobalKey<FormState>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
         ScopedModelDescendant<User>(builder: (context, child, model) {
          return Column( 
            children: <Widget>[
          Card(           
          child: Padding(
            padding: EdgeInsets.all(8.0),
            child: Form(
              key: formKey,
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  TextFormField(
                    decoration: InputDecoration(labelText: 'Email:'),
                    onSaved: (input) => model.onsavedemail = input,
                  ),
                  TextFormField(
                    decoration: InputDecoration(labelText: 'Password:'),
                    onSaved: (input) => model.onsavedpassword = input,
                    obscureText: true,
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: RaisedButton(
                          onPressed: model.submit,
                          // {Navigator.of(context).pushNamed("/Secondpage")}
                          child: Text('Sign in'),
                        ),
                      )
                    ],
                  ),

                ],
              ),
            ),
          )                           
        )
             ],
              );
          }),
            ]
         ),
        ),
    );
  }
}

Надеюсь, кто-то может сказать мне, что я делаю неправильно, и дать мне объяснение, чтобы я получил его для следующей функции, которую я хочу реализовать в своем приложении.

...