我是 Flutter 新手,正在制作一个从谷歌驱动器读取文件的应用程序。它工作正常,但现在就像是从其他地方读取小部件“Column”。如果我写“行”而不是“列”就可以了。只有当我使用 Column 时才会出现这种情况。我检查了googleapi包,没有找到任何名为column的类。下面我附上代码和图片。
import 'dart:math';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
//import 'package:flutterdrive/googleDrive.dart';
import 'dart:async';
import 'dart:convert' show json;
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:googleapis/analytics/v3.dart';
import "package:http/http.dart" as http;
import 'package:google_sign_in/google_sign_in.dart';
import 'package:googleapis/drive/v3.dart' as drive;
import 'package:firebase_auth/firebase_auth.dart';
//import 'package:firebase_auth/firebase_auth.dart';
import 'package:csv/csv.dart';
import 'dart:convert';
import 'package:path_provider/path_provider.dart';
import 'dart:core';
GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: <String>[
'email',
'https://www.googleapis.com/auth/drive.readonly',
],
);
void main() {
runApp(
MaterialApp(
title: 'Google Sign In',
debugShowCheckedModeBanner: false,
home: SignInDemo(),
),
);
}
class SignInDemo extends StatefulWidget {
@override
State createState() => SignInDemoState();
}
class AuthClient extends http.BaseClient {
final http.Client _baseClient;
final Map<String, String> _headers;
AuthClient(this._baseClient, this._headers);
@override
Future<http.StreamedResponse> send(http.BaseRequest request) {
request.headers.addAll(_headers);
return _baseClient.send(request);
}
}
class SignInDemoState extends State<SignInDemo> {
GoogleSignInAccount? _currentUser;
List<drive.File> _documents = [];
List<String?> fileIDs = [];
List<List<dynamic>> csvTables = [];
// Lista de archivos en la clase signindemo
@override
void initState() {
super.initState();
_googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount? account) {
setState(() {
_currentUser = account;
});
if (_currentUser != null) {
//print('ex');
_getDocuments();
}
});
_googleSignIn.signInSilently();
}
void _getDocuments() async {
print('executing');
final client = http.Client();
var header = await _currentUser?.authHeaders;
var authClient = AuthClient(client, header!);
var api = drive.DriveApi(authClient);
String? url, id;
var pageToken = null;
_documents.clear();
do {
// TODO: Change q to search for files, like "name contains 'pdf'"
// api.files.export(fileId, mimeType);
var fileList = await api.files.list(
q: "name contains 'DATA1.csv'",
pageSize: 20,
pageToken: pageToken,
supportsAllDrives: true,
spaces: "drive",
$fields: "nextPageToken, files(id, name, mimeType, thumbnailLink)");
pageToken = fileList.nextPageToken;
print('paju');
_documents.addAll(fileList.files!);
print(_documents.length);
for(var i in _documents){
print(i.id ?? '');
print(i.name ?? '');
}
// print(_documents.first.toString());
} while (pageToken != null);
setState(() {});
}
Future<void> _handleSignIn() async {
try {
await _googleSignIn.signIn();
} catch (error) {
print(error);
}
}
Future<void> _handleSignOut() => _googleSignIn.disconnect();
// @override
Widget _buildBody() {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
ListTile(
leading: GoogleUserCircleAvatar(
identity: _currentUser!,
),
title: Text(_currentUser!.displayName ?? ''),
subtitle: Text(_currentUser!.email ?? ''),
),
const Text("Signed in successfully."),
ElevatedButton(
child: const Text('Get documents'),
onPressed: _getDocuments,
),
ElevatedButton(
child: const Text('SIGN Out'),
onPressed: _handleSignOut,
)
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Google Sign In'),
),
body: ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: _buildBody(),
));
}
}
错误消息通知您
Column
在包flutter
和googleapis
中定义。
您可以尝试隐藏重复的类定义(或者使用导入前缀)。
import 'package:googleapis/analytics/v3.dart' hide Column;