movie and tvshow list
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"dbProtocol": "http",
|
||||||
|
"dbHost": "192.168.0.70",
|
||||||
|
"dbPath": "/multimedia.php",
|
||||||
|
"dbUser": "",
|
||||||
|
"dbPassword": ""
|
||||||
|
}
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
import 'dart:convert';
|
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:http/http.dart' as http;
|
|
||||||
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
|
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
|
||||||
|
|
||||||
class Movie {
|
class Movie {
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
|
||||||
|
|
||||||
|
class TVShow {
|
||||||
|
int seriesID;
|
||||||
|
String seriesName;
|
||||||
|
DateTime firstAired;
|
||||||
|
int seriesState;
|
||||||
|
String resolution;
|
||||||
|
int cliffhanger;
|
||||||
|
String status;
|
||||||
|
|
||||||
|
TVShow({
|
||||||
|
required this.seriesID,
|
||||||
|
required this.seriesName,
|
||||||
|
required this.firstAired,
|
||||||
|
required this.seriesState,
|
||||||
|
required this.resolution,
|
||||||
|
required this.cliffhanger,
|
||||||
|
required this.status,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory TVShow.fromJson(Map<String, dynamic> json) {
|
||||||
|
int seriesState = 0;
|
||||||
|
List<String> stateList = json['seriesState'].toString().split(',');
|
||||||
|
|
||||||
|
bool hasInit = false;
|
||||||
|
bool hasProg = false;
|
||||||
|
bool hasDone = false;
|
||||||
|
|
||||||
|
for (String state in stateList) {
|
||||||
|
if (state[0] == '1') {
|
||||||
|
hasInit = true;
|
||||||
|
} else if (state[0] == '2') {
|
||||||
|
hasProg = true;
|
||||||
|
} else if (state[0] == '3') {
|
||||||
|
hasDone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasProg) {
|
||||||
|
seriesState = 2;
|
||||||
|
} else if (hasInit) {
|
||||||
|
seriesState = 1;
|
||||||
|
} else if (hasDone) {
|
||||||
|
seriesState = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TVShow(
|
||||||
|
seriesID: int.parse(json['seriesID']),
|
||||||
|
seriesName: json['seriesName'],
|
||||||
|
firstAired: DateTime.parse(json['firstAired']),
|
||||||
|
seriesState: seriesState,
|
||||||
|
resolution: json['resolution'],
|
||||||
|
status: json['status'],
|
||||||
|
cliffhanger: int.parse(json['cliffhanger']),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TVShowDataSource extends DataGridSource {
|
||||||
|
/// Creates the employee data source class with required details.
|
||||||
|
TVShowDataSource(this.tvshows) {
|
||||||
|
buildDataGridRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void buildDataGridRow() {
|
||||||
|
_tvshowDataGridRows = tvshows
|
||||||
|
.map<DataGridRow>((e) => DataGridRow(cells: [
|
||||||
|
DataGridCell<int>(columnName: 'seriesID', value: e.seriesID),
|
||||||
|
DataGridCell<int>(
|
||||||
|
columnName: 'seriesState', value: e.seriesState),
|
||||||
|
DataGridCell<String>(columnName: 'status', value: e.status),
|
||||||
|
DataGridCell<int>(
|
||||||
|
columnName: 'cliffhanger', value: e.cliffhanger),
|
||||||
|
DataGridCell<String>(
|
||||||
|
columnName: 'seriesName', value: e.seriesName),
|
||||||
|
DataGridCell<String>(
|
||||||
|
columnName: 'firstAired',
|
||||||
|
value: DateFormat('yyyy-MM-dd').format(e.firstAired)),
|
||||||
|
DataGridCell<String>(
|
||||||
|
columnName: 'resolution', value: e.resolution),
|
||||||
|
]))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TVShow> tvshows = [];
|
||||||
|
|
||||||
|
List<DataGridRow> _tvshowDataGridRows = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<DataGridRow> get rows => _tvshowDataGridRows;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DataGridRowAdapter buildRow(DataGridRow row) {
|
||||||
|
return DataGridRowAdapter(
|
||||||
|
cells: row.getCells().map<Widget>((e) {
|
||||||
|
return Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(e.value.toString()),
|
||||||
|
);
|
||||||
|
}).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDataGrid() {
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-2
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
|
import 'package:global_configuration/global_configuration.dart';
|
||||||
|
|
||||||
import 'package:multimedia/widgets/tabsScreen.dart';
|
import 'package:multimedia/widgets/tabsScreen.dart';
|
||||||
|
|
||||||
@@ -12,16 +13,19 @@ final theme = ThemeData(
|
|||||||
textTheme: GoogleFonts.latoTextTheme(),
|
textTheme: GoogleFonts.latoTextTheme(),
|
||||||
);
|
);
|
||||||
|
|
||||||
void main() {
|
void main() async {
|
||||||
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
await GlobalConfiguration().loadFromPath('assets/cfg/config.json');
|
||||||
|
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
const MyApp({super.key});
|
const MyApp({super.key});
|
||||||
|
|
||||||
// This widget is the root of your application.
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
theme: theme,
|
theme: theme,
|
||||||
title: 'Multimedia',
|
title: 'Multimedia',
|
||||||
|
|||||||
@@ -7,17 +7,13 @@ import 'package:http/http.dart' as http;
|
|||||||
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
|
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
|
||||||
import 'package:syncfusion_flutter_core/theme.dart';
|
import 'package:syncfusion_flutter_core/theme.dart';
|
||||||
|
|
||||||
|
import 'package:global_configuration/global_configuration.dart';
|
||||||
|
|
||||||
import 'package:multimedia/data/movies.dart';
|
import 'package:multimedia/data/movies.dart';
|
||||||
|
|
||||||
Color _kColorInit = const Color.fromARGB(255, 192, 192, 192);
|
Color _kColorInit = const Color.fromARGB(255, 192, 192, 192);
|
||||||
Color _kColorProg = const Color.fromARGB(255, 0, 0, 192);
|
Color _kColorProg = const Color.fromARGB(255, 0, 0, 192);
|
||||||
Color _kColorDone = const Color.fromARGB(255, 0, 192, 0);
|
Color _kColorDone = const Color.fromARGB(255, 0, 192, 0);
|
||||||
// if(m_state == 1)
|
|
||||||
// color = "background-color: #C0C0C0;";
|
|
||||||
// else if(m_state == 2)
|
|
||||||
// color = "background-color: #0000C0; color: #FFFFFF";
|
|
||||||
// else
|
|
||||||
// color = "background-color: #00C000;";
|
|
||||||
|
|
||||||
class MoviesScreen extends StatefulWidget {
|
class MoviesScreen extends StatefulWidget {
|
||||||
const MoviesScreen({
|
const MoviesScreen({
|
||||||
@@ -34,15 +30,25 @@ class _MoviesScreenState extends State<MoviesScreen> {
|
|||||||
List<GridColumn> _columns = [];
|
List<GridColumn> _columns = [];
|
||||||
|
|
||||||
Future<List<Movie>> generateMovieList() async {
|
Future<List<Movie>> generateMovieList() async {
|
||||||
// Give your PHP URL. It may be online URL o local host URL.
|
Uri url = Uri(
|
||||||
// Follow the steps provided in the below KB to configure the mysql using
|
scheme: GlobalConfiguration().getValue('dbProtocol'),
|
||||||
// XAMPP and get the local host php link,
|
host: GlobalConfiguration().getValue('dbHost'),
|
||||||
///
|
path: GlobalConfiguration().getValue('dbPath'),
|
||||||
Uri url = Uri.http('192.168.0.70', 'multimedia.php');
|
queryParameters: {
|
||||||
final response = await http.get(url);
|
'module': 'movie',
|
||||||
var list = json.decode(response.body);
|
'function': 'getList',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
final response = await http.get(url);
|
||||||
|
bool? error;
|
||||||
|
String? errorMessage;
|
||||||
|
|
||||||
|
Map<String, dynamic> movies = json.decode(response.body);
|
||||||
|
error = movies['error'];
|
||||||
|
errorMessage = movies['errmsg'];
|
||||||
|
var list = movies['data'];
|
||||||
|
|
||||||
// Convert the JSON to List collection.
|
|
||||||
List<Movie> _movies =
|
List<Movie> _movies =
|
||||||
await list.map<Movie>((json) => Movie.fromJson(json)).toList();
|
await list.map<Movie>((json) => Movie.fromJson(json)).toList();
|
||||||
movieDataSource = MovieDataSource(_movies);
|
movieDataSource = MovieDataSource(_movies);
|
||||||
@@ -111,20 +117,18 @@ class _MoviesScreenState extends State<MoviesScreen> {
|
|||||||
future: generateMovieList(),
|
future: generateMovieList(),
|
||||||
builder: (context, data) {
|
builder: (context, data) {
|
||||||
return data.hasData
|
return data.hasData
|
||||||
?
|
? SfDataGridTheme(
|
||||||
SfDataGridTheme(
|
|
||||||
data: const SfDataGridThemeData(
|
data: const SfDataGridThemeData(
|
||||||
headerColor: Color(0xff009889),
|
headerColor: Color(0xff009889),
|
||||||
),
|
),
|
||||||
child:
|
child: SfDataGrid(
|
||||||
SfDataGrid(
|
|
||||||
source: movieDataSource,
|
source: movieDataSource,
|
||||||
selectionMode: SelectionMode.single,
|
selectionMode: SelectionMode.single,
|
||||||
navigationMode: GridNavigationMode.row,
|
navigationMode: GridNavigationMode.row,
|
||||||
columns: _columns,
|
columns: _columns,
|
||||||
controller: _dataGridController,
|
controller: _dataGridController,
|
||||||
columnWidthMode: ColumnWidthMode.fill,
|
columnWidthMode: ColumnWidthMode.fill,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
: const Center(
|
: const Center(
|
||||||
child: CircularProgressIndicator(
|
child: CircularProgressIndicator(
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:multimedia/widgets/tvshowsScreen.dart';
|
import 'package:multimedia/widgets/tvshowsScreen.dart';
|
||||||
import 'package:multimedia/widgets/moviesScreen.dart';
|
import 'package:multimedia/widgets/moviesScreen.dart';
|
||||||
|
|
||||||
import 'package:multimedia/data/movies.dart';
|
|
||||||
|
|
||||||
class TabsScreen extends StatefulWidget {
|
class TabsScreen extends StatefulWidget {
|
||||||
const TabsScreen({super.key});
|
const TabsScreen({super.key});
|
||||||
@@ -34,7 +33,7 @@ class _TabsScreenState extends State<TabsScreen> {
|
|||||||
var activePageTitle = 'TV Shows';
|
var activePageTitle = 'TV Shows';
|
||||||
|
|
||||||
if (_selectedPageIndex == 1) {
|
if (_selectedPageIndex == 1) {
|
||||||
activePage = MoviesScreen();
|
activePage = const MoviesScreen();
|
||||||
activePageTitle = 'Movies';
|
activePageTitle = 'Movies';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+212
-49
@@ -1,15 +1,19 @@
|
|||||||
import 'dart:ui' as ui;
|
import 'dart:convert';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
|
||||||
Color _kColGrey = const Color.fromARGB(255, 192, 192, 192);
|
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
|
||||||
Color _kColBlue = const Color.fromARGB(255, 0, 0, 192);
|
import 'package:syncfusion_flutter_core/theme.dart';
|
||||||
Color _kColGreen = const Color.fromARGB(255, 0, 192, 0);
|
|
||||||
Color _kColBlack = const Color.fromARGB(255, 0, 0, 0);
|
|
||||||
Color _kColWhite = const Color.fromARGB(255, 255, 255, 255);
|
|
||||||
|
|
||||||
double _kStateWidth = 6;
|
import 'package:global_configuration/global_configuration.dart';
|
||||||
double _kStateHeight = 30;
|
|
||||||
|
import 'package:multimedia/data/tvshows.dart';
|
||||||
|
|
||||||
|
Color _kColorInit = const Color.fromARGB(255, 192, 192, 192);
|
||||||
|
Color _kColorProg = const Color.fromARGB(255, 0, 0, 192);
|
||||||
|
Color _kColorDone = const Color.fromARGB(255, 0, 192, 0);
|
||||||
|
|
||||||
class TVShowsScreen extends StatefulWidget {
|
class TVShowsScreen extends StatefulWidget {
|
||||||
const TVShowsScreen({
|
const TVShowsScreen({
|
||||||
@@ -20,56 +24,215 @@ class TVShowsScreen extends StatefulWidget {
|
|||||||
State<StatefulWidget> createState() => _TVShowsScreenState();
|
State<StatefulWidget> createState() => _TVShowsScreenState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _TVShowsScreenState extends State<TVShowsScreen>
|
class _TVShowsScreenState extends State<TVShowsScreen> {
|
||||||
with SingleTickerProviderStateMixin {
|
final DataGridController _dataGridController = DataGridController();
|
||||||
ui.Image? _image;
|
late TVShowDataSource tvshowDataSource;
|
||||||
|
List<GridColumn> _columns = [];
|
||||||
|
|
||||||
|
Future<List<TVShow>> generateTVShowList() async {
|
||||||
|
Uri url = Uri(
|
||||||
|
scheme: GlobalConfiguration().getValue('dbProtocol'),
|
||||||
|
host: GlobalConfiguration().getValue('dbHost'),
|
||||||
|
path: GlobalConfiguration().getValue('dbPath'),
|
||||||
|
queryParameters: {
|
||||||
|
'module': 'tvshow',
|
||||||
|
'function': 'getList',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
final response = await http.get(url);
|
||||||
|
bool? error;
|
||||||
|
String? errorMessage;
|
||||||
|
|
||||||
|
Map<String, dynamic> tvshows = json.decode(response.body);
|
||||||
|
error = tvshows['error'];
|
||||||
|
errorMessage = tvshows['errmsg'];
|
||||||
|
var list = tvshows['tvshows'];
|
||||||
|
|
||||||
|
List<TVShow> _tvshows =
|
||||||
|
await list.map<TVShow>((json) => TVShow.fromJson(json)).toList();
|
||||||
|
tvshowDataSource = TVShowDataSource(_tvshows);
|
||||||
|
return _tvshows;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<GridColumn> getColumns() {
|
||||||
|
return <GridColumn>[
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'seriesID',
|
||||||
|
visible: false,
|
||||||
|
width: 70,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('seriesID'))),
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'seriesState',
|
||||||
|
visible: false,
|
||||||
|
width: 70,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('seriesState'))),
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'status',
|
||||||
|
visible: false,
|
||||||
|
width: 70,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('status'))),
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'cliffhanger',
|
||||||
|
visible: false,
|
||||||
|
width: 70,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('cliffhanger'))),
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'seriesName',
|
||||||
|
columnWidthMode: ColumnWidthMode.auto,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('Name'))),
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'firstAired',
|
||||||
|
columnWidthMode: ColumnWidthMode.auto,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('First Aired'))),
|
||||||
|
GridColumn(
|
||||||
|
columnName: 'resolution',
|
||||||
|
columnWidthMode: ColumnWidthMode.auto,
|
||||||
|
label: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: const Text('Resolution'))),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_image = null;
|
_columns = getColumns();
|
||||||
_asyncInit();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _asyncInit() async {
|
|
||||||
final image = await _generateImage();
|
|
||||||
setState(() {
|
|
||||||
_image = image;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void _drawEpisodeState(Canvas c, Paint p, double x, Color color) {
|
|
||||||
Offset p1 = Offset(x + _kStateWidth, 1);
|
|
||||||
Offset p2 = Offset(x + _kStateWidth, _kStateHeight - 1);
|
|
||||||
Rect rect = Rect.fromLTRB(x, 0, x + _kStateWidth, _kStateHeight);
|
|
||||||
p.style = PaintingStyle.fill;
|
|
||||||
p.color = color;
|
|
||||||
c.drawRect(rect, p);
|
|
||||||
p.color = Colors.black;
|
|
||||||
c.drawLine(p1, p2, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<ui.Image> _generateImage() async {
|
|
||||||
final Paint paint = Paint();
|
|
||||||
ui.PictureRecorder recorder = ui.PictureRecorder();
|
|
||||||
Canvas c = Canvas(recorder);
|
|
||||||
|
|
||||||
_drawEpisodeState(c, paint, _kStateWidth * 0, _kColBlack);
|
|
||||||
_drawEpisodeState(c, paint, _kStateWidth * 1, _kColBlue);
|
|
||||||
_drawEpisodeState(c, paint, _kStateWidth * 2, _kColGreen);
|
|
||||||
_drawEpisodeState(c, paint, _kStateWidth * 3, _kColGrey);
|
|
||||||
|
|
||||||
ui.Picture picture = recorder.endRecording();
|
|
||||||
final ui.Image image =
|
|
||||||
await picture.toImage(_kStateWidth.toInt() * 4, _kStateHeight.toInt());
|
|
||||||
|
|
||||||
return image;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: _image != null ? RawImage(image: _image!) : const Text('loading'),
|
body: FutureBuilder<Object>(
|
||||||
|
future: generateTVShowList(),
|
||||||
|
builder: (context, data) {
|
||||||
|
return data.hasData
|
||||||
|
? SfDataGridTheme(
|
||||||
|
data: const SfDataGridThemeData(
|
||||||
|
headerColor: Color(0xff009889),
|
||||||
|
),
|
||||||
|
child: SfDataGrid(
|
||||||
|
source: tvshowDataSource,
|
||||||
|
selectionMode: SelectionMode.single,
|
||||||
|
navigationMode: GridNavigationMode.row,
|
||||||
|
columns: _columns,
|
||||||
|
controller: _dataGridController,
|
||||||
|
columnWidthMode: ColumnWidthMode.fill,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: const Center(
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
strokeWidth: 2,
|
||||||
|
value: 0.8,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TVShowDataSource extends DataGridSource {
|
||||||
|
/// Creates the employee data source class with required details.
|
||||||
|
TVShowDataSource(this.tvshows) {
|
||||||
|
buildDataGridRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void buildDataGridRow() {
|
||||||
|
_tvshowDataGridRows = tvshows
|
||||||
|
.map<DataGridRow>((e) => DataGridRow(cells: [
|
||||||
|
DataGridCell<int>(columnName: 'seriesID', value: e.seriesID),
|
||||||
|
DataGridCell<int>(
|
||||||
|
columnName: 'seriesState', value: e.seriesState),
|
||||||
|
DataGridCell<String>(columnName: 'status', value: e.status),
|
||||||
|
DataGridCell<int>(
|
||||||
|
columnName: 'cliffhanger', value: e.cliffhanger),
|
||||||
|
DataGridCell<String>(
|
||||||
|
columnName: 'seriesName', value: e.seriesName),
|
||||||
|
DataGridCell<String>(
|
||||||
|
columnName: 'firstAired',
|
||||||
|
value: DateFormat('yyyy-MM-dd').format(e.firstAired)),
|
||||||
|
DataGridCell<String>(
|
||||||
|
columnName: 'resolution', value: e.resolution),
|
||||||
|
]))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TVShow> tvshows = [];
|
||||||
|
|
||||||
|
List<DataGridRow> _tvshowDataGridRows = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<DataGridRow> get rows => _tvshowDataGridRows;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DataGridRowAdapter buildRow(DataGridRow row) {
|
||||||
|
return DataGridRowAdapter(
|
||||||
|
cells: row.getCells().map<Widget>((e) {
|
||||||
|
Color colorBG = Colors.white;
|
||||||
|
Color colorFG = Colors.black;
|
||||||
|
FontWeight fontWeight = FontWeight.normal;
|
||||||
|
FontStyle fontStyle = FontStyle.normal;
|
||||||
|
|
||||||
|
if (e.columnName == 'seriesName') {
|
||||||
|
int seriesState = row.getCells().toList()[1].value;
|
||||||
|
String status = row.getCells().toList()[2].value;
|
||||||
|
int cliffhanger = row.getCells().toList()[3].value;
|
||||||
|
|
||||||
|
if (seriesState == 1) {
|
||||||
|
colorBG = _kColorInit;
|
||||||
|
} else if (seriesState == 2) {
|
||||||
|
colorBG = _kColorProg;
|
||||||
|
colorFG = Colors.white;
|
||||||
|
} else {
|
||||||
|
colorBG = _kColorDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cliffhanger == 1) {
|
||||||
|
fontStyle = FontStyle.italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == 'In Production' || status == 'Returning Series') {
|
||||||
|
fontWeight = FontWeight.bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Container(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
color: colorBG,
|
||||||
|
child: Text(
|
||||||
|
e.value.toString(),
|
||||||
|
style: TextStyle(
|
||||||
|
color: colorFG,
|
||||||
|
fontWeight: fontWeight,
|
||||||
|
fontStyle: fontStyle,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDataGrid() {
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -91,6 +91,14 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
global_configuration:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: global_configuration
|
||||||
|
sha256: "432cfe858cfad7263b5cd51b1d342865a3983c400185f3839cc63b4b20702f66"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
google_fonts:
|
google_fonts:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
+4
-1
@@ -40,6 +40,8 @@ dependencies:
|
|||||||
intl: ^0.19.0
|
intl: ^0.19.0
|
||||||
syncfusion_flutter_core: ^25.1.37
|
syncfusion_flutter_core: ^25.1.37
|
||||||
google_fonts: ^6.2.1
|
google_fonts: ^6.2.1
|
||||||
|
global_configuration: ^2.0.0
|
||||||
|
#global_configuration: ^2.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
@@ -64,7 +66,8 @@ flutter:
|
|||||||
uses-material-design: true
|
uses-material-design: true
|
||||||
|
|
||||||
# To add assets to your application, add an assets section, like this:
|
# To add assets to your application, add an assets section, like this:
|
||||||
# assets:
|
assets:
|
||||||
|
- assets/cfg/config.json
|
||||||
# - images/a_dot_burr.jpeg
|
# - images/a_dot_burr.jpeg
|
||||||
# - images/a_dot_ham.jpeg
|
# - images/a_dot_ham.jpeg
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user