вот мой код
import 'package:flutter/material.dart';
import 'package:mobile_smarcerti/app/modules/sertifikasi/views/detail_sertifikasi_body.dart';
import 'package:mobile_smarcerti/app/modules/sertifikasi/views/detail_sertifikasi_page.dart';
import 'package:mobile_smarcerti/pages/upload_sertifikasi_dosen.dart';
import 'package:mobile_smarcerti/services/api_service.dart';
class SertifikasiBody extends StatefulWidget {
const SertifikasiBody({super.key});
@override
__SertifikasiScreenState createState() => __SertifikasiScreenState();
}
class __SertifikasiScreenState extends State {
late Future _sertifikasiFuture;
@override
void initState() {
super.initState();
_sertifikasiFuture = ApiService().fetchSertifikasi();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Row(
children: [
Expanded(
child: TextField(
decoration: InputDecoration(
hintText: 'Search',
prefixIcon: const Icon(Icons.search),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
),
fillColor: const Color.fromARGB(145, 255, 249, 249),
filled: true,
),
),
),
const SizedBox(width: 10),
Container(
height: 54,
width: 48,
decoration: BoxDecoration(
color: const Color.fromARGB(145, 255, 249, 249),
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.black),
),
child: IconButton(
icon: const Icon(Icons.filter_list),
color: Colors.grey[700],
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("Filter Options"),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
title: const Text("Filter 1"),
onTap: () => Navigator.pop(context),
),
ListTile(
title: const Text("Filter 2"),
onTap: () => Navigator.pop(context),
),
ListTile(
title: const Text("Filter 3"),
onTap: () => Navigator.pop(context),
),
],
),
);
},
);
},
),
),
],
),
const SizedBox(height: 10),
Expanded(
child: FutureBuilder(
future: _sertifikasiFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return const Center(child: Text('No data available'));
} else {
final sertifikasis = snapshot.data!;
return ListView.builder(
itemCount: sertifikasis.length,
itemBuilder: (context, index) {
final sertifikasi = sertifikasis[index];
return Card(
color: Colors.white,
margin: const EdgeInsets.symmetric(horizontal: 5, vertical: 10),
child: ListTile(
leading: const Icon(
Icons.library_books,
size: 35.0,
color: Color.fromARGB(255, 55, 94, 151),
),
title: Text(
sertifikasi['nama_sertifikasi'],
style: const TextStyle(
fontFamily: 'Poppins',
fontSize: 16,
color: Color.fromARGB(255, 55, 94, 151),
fontWeight: FontWeight.bold,
),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailSertifikasi(
idSertifikasi: sertifikasi['id_sertifikasi'],
),
),
);
},
trailing: const Icon(
Icons.arrow_forward_ios,
size: 20.0,
color: Color.fromARGB(255, 55, 94, 151),
),
contentPadding: const EdgeInsets.all(20),
),
);
},
);
}
},
),
),
],
),
),
);
}
}
вот мой код api_service
// lib/services/api_service.dart
import 'package:dio/dio.dart';
import 'package:mobile_smarcerti/app/utils/constant.dart';
import 'package:mobile_smarcerti/app/utils/dio_interceptors.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ApiService {
late Dio _dio;
ApiService() {
_dio = Dio(
BaseOptions(
baseUrl: ApiConstants.baseUrl,
connectTimeout: const Duration(seconds: 5),
receiveTimeout: const Duration(seconds: 3),
validateStatus: (status) {
return status! < 500;
},
),
);
_dio.interceptors.add(DioInterceptor());
}
Future get(
String path, {
Map? queryParameters,
Options? options,
}) async {
try {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('auth_token');
final response = await _dio.get(
path,
queryParameters: queryParameters,
options: Options(headers: {
'Authorization': 'Bearer $token',
'Accept': 'application/json',
if (options?.headers != null) ...options!.headers!,
}),
);
return response;
} on DioException catch (e) {
throw _handleError(e);
}
}
Future post(
String path, {
dynamic data,
Map? queryParameters,
Options? options,
}) async {
try {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('auth_token');
final response = await _dio.post(
path,
data: data,
queryParameters: queryParameters,
options: Options(
headers: {
'Authorization': 'Bearer $token',
'Accept': 'application/json',
if (options?.headers != null) ...options!.headers!,
},
),
);
return response;
} on DioException catch (e) {
throw _handleError(e);
}
}
Exception _handleError(DioException e) {
if (e.type == DioExceptionType.connectionTimeout) {
return Exception('Connection timeout');
}
if (e.type == DioExceptionType.receiveTimeout) {
return Exception('Unable to connect to the server');
}
if (e.type == DioExceptionType.unknown) {
return Exception('Something went wrong');
}
return Exception(e.message);
}
Future fetchSertifikasi() async {
try {
final response = await _dio.get('/sertifikasis/');
if (response.data['success']) {
return response.data['data'];
} else {
throw Exception('Failed to load sertifikasi');
}
} catch (e) {
throw Exception('Failed to load sertifikasi: $e');
}
}
Я попробовал создать новый флаттер-проект только с этой функцией сертификации, и он работает правильно, но почему-то не работает, когда я пробую свой основной проект
Я пытаюсь решить эту проблему уже 3 часа, а результат все тот же.
вот ошибка в моем виртуальном телефоне:
Error: Exception: Failed to load sertifikasi: type 'String' is not a subtype of type 'int' of 'index'
а вот ошибка в консоли отладки:
D/EGL_emulation(17071): app_time_stats: avg=426.41ms min=6.15ms max=6485.81ms count=16
W/WindowOnBackDispatcher(17071): OnBackInvokedCallback is not enabled for the application.
W/WindowOnBackDispatcher(17071): Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
D/EGL_emulation(17071): app_time_stats: avg=28.53ms min=4.21ms max=433.69ms count=29
Подробнее здесь: https://stackoverflow.com/questions/792 ... -not-a-sub
Ошибка Flutter: исключение: не удалось загрузить сертификаты: тип «String» не является подтипом типа «int» индекса ⇐ Android
Форум для тех, кто программирует под Android
1732021929
Anonymous
вот мой код
import 'package:flutter/material.dart';
import 'package:mobile_smarcerti/app/modules/sertifikasi/views/detail_sertifikasi_body.dart';
import 'package:mobile_smarcerti/app/modules/sertifikasi/views/detail_sertifikasi_page.dart';
import 'package:mobile_smarcerti/pages/upload_sertifikasi_dosen.dart';
import 'package:mobile_smarcerti/services/api_service.dart';
class SertifikasiBody extends StatefulWidget {
const SertifikasiBody({super.key});
@override
__SertifikasiScreenState createState() => __SertifikasiScreenState();
}
class __SertifikasiScreenState extends State {
late Future _sertifikasiFuture;
@override
void initState() {
super.initState();
_sertifikasiFuture = ApiService().fetchSertifikasi();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Row(
children: [
Expanded(
child: TextField(
decoration: InputDecoration(
hintText: 'Search',
prefixIcon: const Icon(Icons.search),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
),
fillColor: const Color.fromARGB(145, 255, 249, 249),
filled: true,
),
),
),
const SizedBox(width: 10),
Container(
height: 54,
width: 48,
decoration: BoxDecoration(
color: const Color.fromARGB(145, 255, 249, 249),
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.black),
),
child: IconButton(
icon: const Icon(Icons.filter_list),
color: Colors.grey[700],
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("Filter Options"),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
title: const Text("Filter 1"),
onTap: () => Navigator.pop(context),
),
ListTile(
title: const Text("Filter 2"),
onTap: () => Navigator.pop(context),
),
ListTile(
title: const Text("Filter 3"),
onTap: () => Navigator.pop(context),
),
],
),
);
},
);
},
),
),
],
),
const SizedBox(height: 10),
Expanded(
child: FutureBuilder(
future: _sertifikasiFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return const Center(child: Text('No data available'));
} else {
final sertifikasis = snapshot.data!;
return ListView.builder(
itemCount: sertifikasis.length,
itemBuilder: (context, index) {
final sertifikasi = sertifikasis[index];
return Card(
color: Colors.white,
margin: const EdgeInsets.symmetric(horizontal: 5, vertical: 10),
child: ListTile(
leading: const Icon(
Icons.library_books,
size: 35.0,
color: Color.fromARGB(255, 55, 94, 151),
),
title: Text(
sertifikasi['nama_sertifikasi'],
style: const TextStyle(
fontFamily: 'Poppins',
fontSize: 16,
color: Color.fromARGB(255, 55, 94, 151),
fontWeight: FontWeight.bold,
),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailSertifikasi(
idSertifikasi: sertifikasi['id_sertifikasi'],
),
),
);
},
trailing: const Icon(
Icons.arrow_forward_ios,
size: 20.0,
color: Color.fromARGB(255, 55, 94, 151),
),
contentPadding: const EdgeInsets.all(20),
),
);
},
);
}
},
),
),
],
),
),
);
}
}
вот мой код api_service
// lib/services/api_service.dart
import 'package:dio/dio.dart';
import 'package:mobile_smarcerti/app/utils/constant.dart';
import 'package:mobile_smarcerti/app/utils/dio_interceptors.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ApiService {
late Dio _dio;
ApiService() {
_dio = Dio(
BaseOptions(
baseUrl: ApiConstants.baseUrl,
connectTimeout: const Duration(seconds: 5),
receiveTimeout: const Duration(seconds: 3),
validateStatus: (status) {
return status! < 500;
},
),
);
_dio.interceptors.add(DioInterceptor());
}
Future get(
String path, {
Map? queryParameters,
Options? options,
}) async {
try {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('auth_token');
final response = await _dio.get(
path,
queryParameters: queryParameters,
options: Options(headers: {
'Authorization': 'Bearer $token',
'Accept': 'application/json',
if (options?.headers != null) ...options!.headers!,
}),
);
return response;
} on DioException catch (e) {
throw _handleError(e);
}
}
Future post(
String path, {
dynamic data,
Map? queryParameters,
Options? options,
}) async {
try {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('auth_token');
final response = await _dio.post(
path,
data: data,
queryParameters: queryParameters,
options: Options(
headers: {
'Authorization': 'Bearer $token',
'Accept': 'application/json',
if (options?.headers != null) ...options!.headers!,
},
),
);
return response;
} on DioException catch (e) {
throw _handleError(e);
}
}
Exception _handleError(DioException e) {
if (e.type == DioExceptionType.connectionTimeout) {
return Exception('Connection timeout');
}
if (e.type == DioExceptionType.receiveTimeout) {
return Exception('Unable to connect to the server');
}
if (e.type == DioExceptionType.unknown) {
return Exception('Something went wrong');
}
return Exception(e.message);
}
Future fetchSertifikasi() async {
try {
final response = await _dio.get('/sertifikasis/');
if (response.data['success']) {
return response.data['data'];
} else {
throw Exception('Failed to load sertifikasi');
}
} catch (e) {
throw Exception('Failed to load sertifikasi: $e');
}
}
Я попробовал создать новый флаттер-проект только с этой функцией сертификации, и он работает правильно, но почему-то не работает, когда я пробую свой основной проект
Я пытаюсь решить эту проблему уже 3 часа, а результат все тот же.
вот ошибка в моем виртуальном телефоне:
Error: Exception: Failed to load sertifikasi: type 'String' is not a subtype of type 'int' of 'index'
а вот ошибка в консоли отладки:
D/EGL_emulation(17071): app_time_stats: avg=426.41ms min=6.15ms max=6485.81ms count=16
W/WindowOnBackDispatcher(17071): OnBackInvokedCallback is not enabled for the application.
W/WindowOnBackDispatcher(17071): Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
D/EGL_emulation(17071): app_time_stats: avg=28.53ms min=4.21ms max=433.69ms count=29
Подробнее здесь: [url]https://stackoverflow.com/questions/79203025/flutter-error-exception-failed-to-load-sertifikasi-type-string-is-not-a-sub[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия