You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
6.5 KiB
200 lines
6.5 KiB
import 'dart:convert';
|
|
import 'dart:typed_data';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:teso/Classes/Uploading.dart';
|
|
import 'package:teso/providers/user_provider.dart';
|
|
import 'package:teso/util/consts.dart';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
class CreateCampaignPost extends StatefulWidget {
|
|
final String video;
|
|
final Uint8List thumbnail;
|
|
final String campaignID;
|
|
final String aspectRatio;
|
|
|
|
const CreateCampaignPost({
|
|
Key key,
|
|
this.video,
|
|
this.thumbnail,
|
|
this.campaignID,
|
|
this.aspectRatio,
|
|
}) : super(key: key);
|
|
@override
|
|
_CreateCampaignPostState createState() => _CreateCampaignPostState();
|
|
}
|
|
|
|
class _CreateCampaignPostState extends State<CreateCampaignPost> {
|
|
String aspectRatio;
|
|
TextEditingController controller;
|
|
SharedPreferences prefs;
|
|
bool sending = false;
|
|
|
|
void postVideo(context) async {
|
|
setState(() {
|
|
sending = true;
|
|
});
|
|
try {
|
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
String token = prefs.getString("tokensTeso");
|
|
Map<String, String> requestHeaders = {'Authorization': token};
|
|
String urlLocation = tesoStreaming + "api/mobile/upload/authurl";
|
|
var client =
|
|
await http.get(Uri.parse(urlLocation), headers: requestHeaders);
|
|
if (client.statusCode == 200) {
|
|
var details = jsonDecode(client.body);
|
|
String muxuploadsID = details["data"]["id"];
|
|
String muxuploadsURL = details["data"]["url"];
|
|
|
|
Provider.of<UserProvider>(context, listen: false).uploadPost(Uploading(
|
|
id: DateTime.now().toString() +
|
|
widget.video.replaceAll("file://", ""),
|
|
aspect: widget.aspectRatio,
|
|
path: widget.video.replaceAll("file://", ""),
|
|
thumbnail:
|
|
widget.thumbnail != null ? base64Encode(widget.thumbnail) : null,
|
|
title: controller.text,
|
|
pending: 0,
|
|
campaignID: widget.campaignID,
|
|
muxuploadID: muxuploadsID,
|
|
muxuploadURL: muxuploadsURL,
|
|
));
|
|
Navigator.pop(context);
|
|
}
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
setState(() {
|
|
sending = false;
|
|
});
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
controller = new TextEditingController();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
controller.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: PreferredSize(
|
|
child: AppBar(
|
|
automaticallyImplyLeading: true,
|
|
title: Text("Post"),
|
|
centerTitle: true,
|
|
),
|
|
preferredSize: Size.fromHeight(70.0),
|
|
),
|
|
body: SingleChildScrollView(
|
|
child: Container(
|
|
width: MediaQuery.of(context).size.width,
|
|
height: MediaQuery.of(context).size.height,
|
|
padding: EdgeInsets.all(MediaQuery.of(context).size.width * 0.025),
|
|
child: Column(
|
|
children: [
|
|
Container(
|
|
width: MediaQuery.of(context).size.width,
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Container(
|
|
width: MediaQuery.of(context).size.width * 0.25,
|
|
height: MediaQuery.of(context).size.width * 0.35,
|
|
color: Colors.black,
|
|
child: widget.thumbnail != null
|
|
? Image.memory(widget.thumbnail)
|
|
: CupertinoActivityIndicator(
|
|
animating: true,
|
|
radius: 15,
|
|
),
|
|
),
|
|
Container(
|
|
width: (MediaQuery.of(context).size.width) -
|
|
(MediaQuery.of(context).size.width * 0.35),
|
|
height: MediaQuery.of(context).size.width * 0.35,
|
|
child: TextField(
|
|
decoration: InputDecoration(
|
|
border: OutlineInputBorder(
|
|
borderSide: BorderSide.none,
|
|
),
|
|
filled: true,
|
|
isDense: true,
|
|
labelText: "Say Something..",
|
|
labelStyle: TextStyle(
|
|
color: Colors.black54,
|
|
),
|
|
fillColor: Colors.white70,
|
|
),
|
|
controller: controller,
|
|
maxLines: null,
|
|
keyboardType: TextInputType.text,
|
|
textInputAction: TextInputAction.done,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
SizedBox(
|
|
height: 20,
|
|
),
|
|
Divider(),
|
|
Container(
|
|
margin: EdgeInsets.only(
|
|
top: 10,
|
|
),
|
|
child: Text(
|
|
"Teso businesses and other Teso users can see your post in their feeds and on your profile.",
|
|
textAlign: TextAlign.center,
|
|
style: TextStyle(
|
|
color: Colors.grey,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
floatingActionButton: !sending
|
|
? Container(
|
|
margin: EdgeInsets.all(20),
|
|
width: MediaQuery.of(context).size.width,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(15.0),
|
|
color: tesoBlue,
|
|
),
|
|
child: InkWell(
|
|
onTap: () => postVideo(context),
|
|
child: Center(
|
|
child: Text(
|
|
"NEXT",
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
height: 50,
|
|
)
|
|
: Container(
|
|
width: MediaQuery.of(context).size.width,
|
|
height: 50,
|
|
child: Center(
|
|
child: CupertinoActivityIndicator(
|
|
animating: true,
|
|
radius: 15,
|
|
),
|
|
),
|
|
),
|
|
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
|
|
);
|
|
}
|
|
}
|
|
|