import 'dart:convert';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_songbei/custom/common_bottom_sheet.dart';
import 'package:flutter_songbei/custom/griditem/add_post_images_grid_item.dart';
import 'package:flutter_songbei/custom/network_loading.dart';
import 'package:flutter_songbei/models/image_model.dart';
import 'package:flutter_songbei/models/post_model.dart';
import 'package:flutter_songbei/network/chttp.dart';
import 'package:flutter_songbei/network/params.dart';
import 'package:flutter_songbei/provider/app.dart';
import 'package:flutter_songbei/qiniu/qiniu_file.dart';
import 'package:flutter_songbei/qiniu/qiniu_scuess.dart';
import 'package:flutter_songbei/utils/qiniu.dart';
import 'package:flutter_songbei/utils/toast_util.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
import 'package:provider/provider.dart';
import 'package:sy_flutter_qiniu_storage/sy_flutter_qiniu_storage.dart';
class AddPostPage extends StatefulWidget {
@override
State createState() {
return _PageState();
}
}
class _PageState extends State<AddPostPage> {
TextEditingController _titleController = TextEditingController();
TextEditingController _controller = TextEditingController();
String specification = "";
int per_add = 0;
int image_max = 9;
String token = '';
Map qiniuFlies = Map();
List images = List();
final ImagePicker _picker = ImagePicker();
@override
void initState() {
var image = ImageModel();
image.type = 1;
images.add(image);
_reqQiniuToken();
rootBundle.loadString('assets/data/specification.txt').then((value) => {
this.specification = value,
print('-----specification:${specification}')
});
WidgetsBinding.instance.addPostFrameCallback((_) {
_reqPrivileges();
});
super.initState();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'想法',
),
centerTitle: true,
actions: [
FlatButton.icon(
onPressed: () {
_submit();
},
icon: Icon(
Icons.near_me,
size: 14,
color: Colors.white,
),
label: Text(
'发布',
style: TextStyle(color: Colors.white),
),
)
],
),
body: Container(
color: Colors.white,
padding: EdgeInsets.all(10),
child: Column(
children: [
TextField(
controller: _controller,
minLines: 5,
maxLines: 20,
decoration: InputDecoration(
contentPadding: EdgeInsets.all(5.0),
hintText: '写下你的想法',
filled: true,
fillColor: Colors.white,
border: InputBorder.none,
),
),
Flexible(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 1.0
),
itemCount: images.length,
itemBuilder: (content, index) {
return AddPostGridItem(
images[index],
onAdd: (item) {
showPhotos();
},
onDel: (item) {
print('-----item:$item');
images.removeAt(index);
for (var i = images.length - 1; i >= 0; i--) {
if (images[i].id == item.id) {
images.removeAt(i);
}
}
if (images.length < image_max) {
if (images[images.length - 1].type != 1) {
var image = ImageModel();
image.type = 1;
images.add(image);
}
}
setState(() {});
},
);
}),
),
],
),
));
}
showPhotos() {
var cur_images = 0;
for (var i = 0; i < images.length; i++) {
if (images[i].type == 0) {
cur_images++;
}
}
if (cur_images < image_max) {
} else {
ToastUtil.showToast(context, '最多可上传$image_max张图片');
}
showDialog(
barrierDismissible: true,
context: context,
builder: (BuildContext context) {
var list = List();
list.add('相册');
list.add('相机');
return CommonBottomSheet(
list: list,
onItemClickListener: (index) async {
print('-----index:$index');
if (index == 0 || index == 2) {
var source = ImageSource.gallery;
if (index == 2) source = ImageSource.camera;
PickedFile file = await _picker.getImage(source: source);
if (file == null) {
ToastUtil.showToast(context, '选择文件失败');
return;
}
var insert_index = 0;
images.forEach((element) {
if (element.type == 0) {
insert_index += 1;
}
});
var image = ImageModel();
image.path = image.url = file.path;
image.type = 0;
image.state = 0;
images.insert(insert_index, image);
if (images.length > image_max) {
for (var i = images.length - 1; i >= 0; i--) {
if (images[i].type == 1) {
images.removeAt(i);
}
}
}
setState(() {});
Future future = this._onUpload(file);
future.then((qiniuScuess) {
for (var i = 0; i < images.length; i++) {
if (images[i].type == 0 &&
images[i].path == qiniuScuess.file_path) {
images[i].state = 1;
images[i].url = Qiniu.getUpUrl(qiniuScuess.qiniu_key);
print('------上传成功');
}
}
setState(() {});
});
}
Navigator.pop(context);
},
);
});
}
_submit() {
print("==============================");
if (_controller.text.isEmpty) {
ToastUtil.showToast(context, '写下你的想法');
return;
}
List upImages = List();
for (var i = 0; i < images.length; i++) {
if (images[i].type == 0 && images[i].state == 1) {
upImages.add(images[i]);
}
}
var to_json = {};
if (upImages.length > 0) {
List