আপনি এখানে করতে পারেন বেশ কয়েকটি জিনিস আছে। @ মাহির উত্তর সঠিক হওয়ার পরে কিছুটা বেশি সংহত হতে পারে এবং ওপি যেমন জিজ্ঞাসা করছে ঠিক তেমন ডায়ালগের পরিবর্তে পুশ ব্যবহার করতে পারে। এটি ব্যবহার করে এমন একটি উদাহরণ Navigator.push
:
import 'package:flutter/material.dart';
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
color: Colors.green,
child: new Column(
children: <Widget>[
new RaisedButton(
onPressed: () => Navigator.pop(context),
child: new Text("back"),
),
],
),
);
}
}
class FirstPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new FirstPageState();
}
class FirstPageState extends State<FirstPage> {
Color color = Colors.white;
@override
Widget build(BuildContext context) {
return new Container(
color: color,
child: new Column(
children: <Widget>[
new RaisedButton(
child: new Text("next"),
onPressed: () {
Navigator
.push(
context,
new MaterialPageRoute(builder: (context) => new SecondPage()),
)
.then((value) {
setState(() {
color = color == Colors.white ? Colors.grey : Colors.white;
});
});
}),
],
),
);
}
}
void main() => runApp(
new MaterialApp(
builder: (context, child) => new SafeArea(child: child),
home: new FirstPage(),
),
);
তবে এটি করার আরও একটি উপায় রয়েছে যা আপনার ব্যবহারের ক্ষেত্রে ভালভাবে ফিট করতে পারে। যদি আপনি global
এমন কিছু হিসাবে ব্যবহার করছেন যা আপনার প্রথম পৃষ্ঠার নির্মাণকে প্রভাবিত করে, আপনি আপনার বিশ্বব্যাপী ব্যবহারকারীর পছন্দগুলি সংজ্ঞায়িত করতে একটি ইনহরাইটড উইজেট ব্যবহার করতে পারেন এবং প্রতিবার সেগুলি পরিবর্তন করা হলে আপনার ফার্স্টপেজটি পুনর্নির্মাণ করবে। এটি নীচে দেখানো হিসাবে একটি স্টেটহীন উইজেটের মধ্যেও কাজ করে (তবে পাশাপাশি রাষ্ট্রীয় উইজেটেও কাজ করা উচিত)।
এলোমেলোভাবে উইজেটের উদাহরণ হ'ল অ্যাপটির থিম, যদিও তারা এটিকে এখানে যেমন আছে ঠিক তেমনিভাবে তৈরি করার পরিবর্তে একটি উইজেটের মধ্যেই এটি সংজ্ঞায়িত করে।
import 'package:flutter/material.dart';
import 'package:meta/meta.dart';
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
color: Colors.green,
child: new Column(
children: <Widget>[
new RaisedButton(
onPressed: () {
ColorDefinition.of(context).toggleColor();
Navigator.pop(context);
},
child: new Text("back"),
),
],
),
);
}
}
class ColorDefinition extends InheritedWidget {
ColorDefinition({
Key key,
@required Widget child,
}): super(key: key, child: child);
Color color = Colors.white;
static ColorDefinition of(BuildContext context) {
return context.inheritFromWidgetOfExactType(ColorDefinition);
}
void toggleColor() {
color = color == Colors.white ? Colors.grey : Colors.white;
print("color set to $color");
}
@override
bool updateShouldNotify(ColorDefinition oldWidget) =>
color != oldWidget.color;
}
class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var color = ColorDefinition.of(context).color;
return new Container(
color: color,
child: new Column(
children: <Widget>[
new RaisedButton(
child: new Text("next"),
onPressed: () {
Navigator.push(
context,
new MaterialPageRoute(builder: (context) => new SecondPage()),
);
}),
],
),
);
}
}
void main() => runApp(
new MaterialApp(
builder: (context, child) => new SafeArea(
child: new ColorDefinition(child: child),
),
home: new FirstPage(),
),
);
যদি আপনি উত্তরাধিকারসূত্রে প্রাপ্ত উইজেট ব্যবহার করেন তবে আপনাকে যে পৃষ্ঠার ধাক্কা দেওয়া হয়েছে তার পপটি দেখার জন্য আপনার চিন্তা করতে হবে না, যা বেসিক ব্যবহারের ক্ষেত্রে কাজ করবে তবে আরও জটিল পরিস্থিতিতে সমস্যা হতে পারে।