Как мне сделать так, чтобы при щелчке по значку открывался другой файл подкачки в флаттере
Как мне сделать так, чтобы при нажатии на значок открывался другой файл подкачки в флаттере? У меня есть эти значки, которые, когда вы нажимаете на них, перенаправляет вас на URL-адрес, я хочу сделать так, чтобы при нажатии одного конкретного значка вместо открытия URL-адреса открывался другой файл страницы, действующий как navigator.push...
Но когда я добавляю ontap на свою карту задач, я получаю сообщение об ошибке, я установил pageUrl = "", но ничего не вернул, поэтому я удалил this.required pageUrl и изменил на this.pageUrl, и теперь у меня есть эта ошибка Параметр «pageUrl» не может иметь значение «null» из-за своего типа, но неявное значение по умолчанию равно «null», мой код выглядит следующим образом:
import 'dart:ui';
import 'package:url_launcher/url_launcher.dart';
import '';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:schoolmanagement/nav_bar.dart';
class DinningScreen extends StatefulWidget {
const DinningScreen({super.key});
@override
State<DinningScreen> createState() => _DinningState();
}
class _DinningState extends State<DinningScreen> {
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: NavBar(),
key: scaffoldKey,
appBar: AppBar(...),
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xffF6FECE), Color(0xffB6C0C8)],
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
tileMode: TileMode.clamp),
),
//Here we set the "Manage your ... box and it's properties"
padding: const EdgeInsets.all(12.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(...),
SizedBox(
height: 20.0,
),
Text(
"Sections",
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
fontFamily: "SpaceGrotesk",
color: Colors.black),
),
//Here we set the "Shortcuts"
//If you click Teachers it will take you the page where you can see the Teachers -
//names a nd availabity alongs side the subject they teach
//If you click EduPage it takes you to edupage
//If you click Timetable it takes you to the Timetable generator
//If you click Messages it asks you to join a messenger Gc of Students of your class
Row(
children: [
Expanded(
child: TaskCard(
label: "Teachers",
pageUrl: "",
)),
Expanded(
child: TaskCard(
imageUrl: "assets/school-bag.png",
label: "EduPage",
pageUrl: "https://willowcosta.edupage.org",
)),
// Это то, что я хочу изменить с перехода по URL-адресу на другую страницу
Expanded(
child: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
);
},
child: TaskCard(
imageUrl: "assets/timetable.png",
pageUrl: "",
label: "Timetable",
),
)),
Expanded(
child: TaskCard(
imageUrl: "assets/message.png",
pageUrl: "https://www.messenger.com",
label: "Messages",
)),
],
),
//Here we set the tasks that we have
const SizedBox(
height: 20.0,
),
const Text(
"You have 6 tasks for this week",
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
fontFamily: "SpaceGrotesk",
color: Colors.black),
),
const TaskContainer(),
const TaskContainer(),
const TaskContainer(),
const TaskContainer(),
const TaskContainer(),
const TaskContainer(),
const SizedBox(
height: 100.0,
),
],
),
),
),
Определение TaskCard находится здесь:
class TaskCard extends StatelessWidget {
final String? imageUrl;
final String? label;
final String pageUrl;
const TaskCard(
{Key? key, this.imageUrl, required this.label, required this.pageUrl})
: super(key: key);
//Function to launch the selected url
Future<void> goToWebPage(String urlString) async {
final Uri _url = Uri.parse(urlString);
if (!await launchUrl(_url)) {
throw 'Could not launch $_url';
}
}
@override
Widget build(BuildContext context) {
return Padding(
//Here we set the properties of our Sections (Teachers etc)
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
height: 80.0,
width: 76.1,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20.0),
boxShadow: [
BoxShadow(
color: Colors.grey, blurRadius: 2.0, spreadRadius: 0.5),
]),
child: IconButton(
onPressed: () async {
if(pageUrl !=""){
await goToWebPage(pageUrl);
}
},
icon: Image.asset(
imageUrl ?? "assets/teacher.png",
height: 75.0,
width: 70.0,
),
),
),
SizedBox(
height: 10.0,
),
Text(
label ?? "",
style: TextStyle(fontSize: 16.0),
)
],
),
);
}
}
1 ответ
Параметр «pageUrl» не может иметь значение «null» из-за своего типа, но неявное значение по умолчанию — «null».
Проверьте,pageUrl
является пустой строкой. Если это пустойString
, не звониgoToWebPage
.
onPressed: () async {
if(pageUrl !=""){
await goToWebPage(pageUrl);
}
},