我试过了我所知道的一切,但没能解决这个问题。
运行输出:
在调试模式下在moto 40融合上启动lib\main.dart .运行Gradle任务‘assembleDebug’。√构建了build\app\outputs\颤振-apk\app-调试器。D/FlutterLocationService(30742):创建服务。D/FlutterLocationService(30742):绑定到位置服务。调试服务侦听ws://127.0.0.1:51746/KGrWp8utBGI=/ws同步文件到设备moto g 40融合E/SQLiteLog(30742):(1)没有这样的表:"SELECT * FROM placestore“I/AssistStructure(30742):扁平的最终辅助数据: 396字节,包含1个窗口,3个视图D/MediaScannerConnection(30742):扫描/data/user/0/com.example.memory_place/cache/04c048c7-d58f-497c-b050-fb56e943fc1b615751689670497232.mp4到null D/ThumbnailPlugin(30742):原始w:1080,h:1920 => 150,267E/颤振(30742):错误:flutter/lib/ui/ui_dart_state.cc(209个)未处理异常: FileSystemException:无法将文件复制到FileSystemException 5�5f��O���
手势===============================================================捕获的========异常在处理手势时引发了以下LateError : LateInitializationError:字段'_CurrentThumbnail@643317077‘尚未初始化。
当抛出异常时,这是堆栈:#0 (package:memory_place/Screens/add_places_screen.dart) #1 AddScreen.build.SafePlace (package:memory_place/Screens/add_places_screen.dart:25:47) #2 AddScreen.build。(package:memory_place/Screens/add_places_screen.dart:64:15) #3 _InkResponseState._handleTap #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24) #5 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11) #6 BaseTapGestureRecognizer._checkUp (打包:颤振/src/手势/点击)( (package:flutter/src/gestures/recognizer.dart:563:9) /src/.dart:296:5/.dart:296:5:230:7) #8 PrimaryPointerGestureRecognizer.handleEvent #9 PointerRouter._dispatch PointerRouter._dispatchEventToRoutes #10 PointerRouter._dispatchEventToRoutes。(package:flutter/src/gestures/pointer_router.dart:139:9) #11 _LinkedHashMapMixin.forEach #12 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:137:18) #13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:123:7) #14 GestureBinding.handleEvent (包装:颤振/src/手势/binding.dart)::439:19) #15 (package:flutter/src/gestures/binding.dart:419:22) #16 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:322:11) #17 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7) #18 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5) #19 GestureBinding._flushPointerEventQueuesrc/ GestureBinding._handlePointerDataPacket /binding.dart:296:7) #20 GestureBinding._handlePointerDataPacket #24 _invoke1 (飞镖:ui/hooks.dart:170:10) #25 PlatformDispatcher._dispatchPointerDataPacket (飞镖:ui/platform_Dispatcher.dart:331:7) #26 _dispatchPointerDataPacket (飞镖:ui/hooks.dart:94:31)TapGestureRecognizer#12cd2 debugOwner: GestureDetector state:可能获胜竞技场finalPosition:偏移(239.2,( 911.2) finalLocalPosition:偏移(239.2,11.2)按钮:1按下点击
DB助手文件:
import 'package:sqflite/sqflite.dart' as sql;
import 'package:path/path.dart' as p;
class dbHelper{
static Future<sql.Database> DataBase() async{
return sql.openDatabase(p.join(await sql.getDatabasesPath(),'memory_place.db'),
onCreate: (db, version) async{
return await db.execute('CREATE TABLE placestore(id TEXT PRIMARY KEY, title TEXT, video TEXT, thumbnail TEXT)');
},version: 1);
}
static Future<void> insert(String Table,Map<String,Object> data) async{
final db = await dbHelper.DataBase();
db.insert(
Table,
data,
conflictAlgorithm: sql.ConflictAlgorithm.replace);
}
static Future<List<Map<String,dynamic>>> getData(String table) async{
final db = await dbHelper.DataBase();
return db.query(table);
}
}图像输入页面:
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart' as syspath;
import 'package:path/path.dart' as p;
import 'package:video_thumbnail/video_thumbnail.dart';
class ImageInput extends StatefulWidget {
Function onSelected;
ImageInput({required this.onSelected});
@override
State<ImageInput> createState() => _ImageInputState();
}
class _ImageInputState extends State<ImageInput> {
XFile ? _referenceXFileVid;
File? _referenceVidFile;
Future<void> TakePic() async{
final _imagePicker = ImagePicker();
final NewFile = await _imagePicker.pickVideo(
source: ImageSource.camera,
maxDuration: Duration(minutes: 1));
setState(() {
_referenceVidFile = File(NewFile!.path);
_referenceXFileVid = NewFile;
});
}
Future<Uint8List?> VideoThumbNail(XFile Video) async{
final uint8list = await VideoThumbnail.thumbnailData(
video: Video.path,
imageFormat: ImageFormat.JPEG,
maxWidth: 150,
quality: 25,
);
return await uint8list;
}
@override
Widget build(BuildContext context) {
return Row(
children: [
Container(
height: 267,
width: 150,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(width: 1,color: Colors.grey),
),
child: _referenceVidFile!= null ?
FutureBuilder<Uint8List?>(
future: VideoThumbNail(_referenceXFileVid!),
builder: (context,uint8) {
if(uint8.hasData){
final ImagePath = uint8.data;
final CurrentThumbImg = Image.memory(ImagePath!,
height: 267,
width: 150,
fit: BoxFit.cover,);
SaveVidAndThumb(_referenceVidFile!,File.fromRawPath(ImagePath));
return CurrentThumbImg;
}else{
return Center(child: Text('Saumya Made Mistake',textAlign: TextAlign.center,));
}
}) : Text('No Video Taken',textAlign: TextAlign.center,),
),
SizedBox(width: 10,),
Expanded(
child: FlatButton.icon(onPressed: (){
TakePic();
},
icon: Icon(Icons.camera),
label: Text('Take Video'),
textColor: Theme.of(context).primaryColor,),
),
],
);
}
void SaveVidAndThumb(File Video,File Thumbnail) async{
final appDir = await syspath.getApplicationDocumentsDirectory();
final VideoPath = p.basename(Video.path);
final ThumbPath = p.basename(Thumbnail.path);
final Savedvideo = await Video.copy('${appDir.path}/$VideoPath');
final SavedThumb = await Thumbnail.copy('${appDir.path}/$ThumbPath');
widget.onSelected(Savedvideo,SavedThumb);
}
}添加位置屏幕:
import 'dart:io';
import 'package:memory_place/models/Video_format.dart';
import 'package:memory_place/providers/place_provider.dart';
import 'package:memory_place/widgets/Location_Input.dart';
import 'package:provider/provider.dart';
import 'package:flutter/material.dart';
import 'package:memory_place/widgets/Image_Input.dart';
class AddScreen extends StatelessWidget {
TextEditingController _TitleTextController = TextEditingController();
late File _CurrentVideo;
late File _CurrentThumbnail;
void CallCurrentImage(File CurrentVideo,File CurrentThumbnail){
if(CurrentVideo!=null){
_CurrentVideo = CurrentVideo;
_CurrentThumbnail = CurrentThumbnail;
}
}
@override
Widget build(BuildContext context) {
void SafePlace(){
if(_TitleTextController.text == null || _CurrentThumbnail == null){
throw Text('Either Title or Image is Missing');
}else {
Provider.of<PlaceProvider>(context, listen: false).AddPlace(
_TitleTextController.text,
_CurrentVideo,
_CurrentThumbnail);
Navigator.pop(context);
}
}
return Scaffold(
appBar: AppBar(
title: Text('Add Place Screen'),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child:SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(10.0),
child: Column(
children: [
TextField(
decoration: InputDecoration(label: Text('Title...')),
controller: _TitleTextController,
),
SizedBox(height: 20,),
ImageInput(onSelected: CallCurrentImage),
SizedBox(height: 20,),
LocationInput(),
],
),
),
) ),
RaisedButton.icon(
onPressed: (){
SafePlace();
},
icon: Icon(Icons.add),
label: Text('Add Place'),
elevation: 0,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
color: Theme.of(context).accentColor,
)
],
),
);
}
}发布于 2022-06-04 08:21:07
当您将一个变量声明为late时,实际上是指示它将不是null。
在代码中,您将_CurrentThumbnail变量声明为late,而不是实例化它。
您可以将AddScreen小部件更改为StatefulWidget,并在initState函数中实例化_CurrentThumbnail。(甚至在initState中调用CallCurrentImage )
https://stackoverflow.com/questions/72497643
复制相似问题