首页 > 解决方案 > Flutter build_runner 添加第三方生成器时构建失败

问题描述

我编写了一个运行良好的颤振项目,并且能够正确构建它,但是当我添加 retrofit_generator 时构建失败,如果我删除生成器,代码运行正常并且构建也成功。这是错误,

不支持的操作:无法解析文件:///C:/Users/User/AndroidStudioProjects/digigad/lib/resources/network/repository.dart;仅支持“package”和“asset”方案 [SEVERE] retrofit_generator:retrofit on lib/ui/login/login_view.dart:

这是我的 login_view.dart 代码

 class LoginView extends StatefulWidget {
  @override
  _LoginViewState createState() => _LoginViewState();
}

class _LoginViewState extends State<LoginView> {
  LoginViewModel _loginViewModel;

  @override
  void initState() {
    super.initState();
    _loginViewModel = locator<LoginViewModel>();
  }

  @override
  Widget build(BuildContext context) {
    return ViewModelBuilder<LoginViewModel>.nonReactive(
        builder: (context, model, child) {
          return Scaffold(
            backgroundColor: Colors.white,
            body: SafeArea(
              child: Padding(
                padding: const EdgeInsets.all(30.0),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: <Widget>[
                    Container(
                      child: Center(
                        child: Container(
                          child: Image.asset('images/iv_logo.png'),
                          width: 100,
                          height: 100,
                        ),
                      ),
                    ),
                    Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            _socialButton(
                                image: 'icons/ic_facebook.png',
                                title: 'Facebook'),
                            SizedBox(
                              width: 30,
                            ),
                            _socialButton(
                                image: 'icons/ic_google.png', title: 'Google'),
                          ],
                        ),
                        SizedBox(
                          height: 30,
                        ),
                        Text(
                          'or',
                          style: TextStyle(
                              fontSize: 15, color: AppConstants.colorHint),
                        ),
                        SizedBox(
                          height: 20,
                        ),
                        StreamBuilder<String>(
                            stream: model.phoneStream,
                            builder: (context, snapshot) {
                              return Column(
                                children: <Widget>[
                                  AppFunctions.getTextInputField(
                                      hintText: 'Mobile Number',
                                      maxLength: 10,
                                      inputType: TextInputType.phone,
                                      onChanged: model.onPhoneChanged,
                                      errorText: snapshot.error),
                                  AppFunctions.getStandardDivider(),
                                  AppFunctions.getBigButton(
                                    title: 'Login',
                                    color: snapshot.hasData
                                        ? AppConstants.colorPrimary
                                        : AppConstants.colorHint,
                                    onClick: snapshot.hasData
                                        ? () => _loginViewModel
                                            .onLoginClicked(snapshot.data)
                                        : () => () {},
                                  )
                                ],
                              );
                            }),
                      ],
                    ),
                    Center(
                      child: Row(
                        mainAxisSize: MainAxisSize.max,
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Text('Made with '),
                          Icon(
                            Icons.favorite,
                            color: Colors.red,
                          ),
                          Text(' in Flutter'),
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          );
        },
        viewModelBuilder: () => _loginViewModel);
  }

  Expanded _socialButton({String image, String title}) {
    return Expanded(
      child: Container(
        height: 40,
        child: RaisedButton(
          onPressed: () {},
          color: Colors.white,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Image.asset(
                image,
                width: 16,
                height: 16,
              ),
              SizedBox(
                width: 10,
              ),
              Text(title)
            ],
          ),
        ),
      ),
    );
  }
}

标签: flutterdart

解决方案


我也遇到了同样的错误,并且知道我的项目文件中有一些直接导入语句。

该导入语句是login_page.dart

import 'file:///D:/Major_Project/connect/lib/api/api.dart';

在这种情况下,构建 日志中引发了相同的错误

所以在项目中找到那个语句,用正常的import语句改一下

login_page.dart

import 'package:connect/api/api.dart';

推荐阅读