Подробнее сменить язык Flutter просмотреть страницу
Я пытаюсь сделать приложение адаптивным. Я сделал это, и список изменил язык, но страница сведений не изменилась. Как я мог его восстановить? Данные из базы данных sqlite. Я безуспешно пытался использовать провайдера... Мой код:
home_page.dart:
Здесь я проверяю ориентацию и ширину экрана (только для теста 700) и строю главный экран.
import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/home_screen_list.dart';
import 'package:flut_bount/user.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
PageController pageController;
var isLargeScreen = false;
List<User> users;
class HomePage extends StatefulWidget {
@override
_HomePagePageState createState() => _HomePagePageState();
}
class _HomePagePageState extends State<HomePage> {
@override
void initState() {
super.initState();
}
int actualPage = 0;
@override
Widget build(BuildContext context) {
Widget _widget;
return
/* Provider<MyModel>(
create: (_) => MyModel(),
child: */
Scaffold(
body: OrientationBuilder(
builder: (context, orientation) {
if (MediaQuery.of(context).size.shortestSide > 700 &&
MediaQuery.of(context).orientation == Orientation.landscape) {
isLargeScreen = true;
} else {
isLargeScreen = false;
}
return Row(
children: <Widget>[
Expanded(
flex: 1,
child: MyHomeScreenList(),
),
isLargeScreen
? Expanded(
flex: 2,
child: FutureBuilder(
future: DatabaseHelper.getUsers(),
builder:
(context, AsyncSnapshot<List<dynamic>> snapshot) {
Widget _widget;
if (snapshot.hasData) {
users = snapshot.data;
/* final model =
Provider.of<MyModel>(context, listen: false);
MyModel().users = users;*/
_widget = DetailedView(users, 0);
} else if (snapshot.hasError) {
_widget =
Center(child: Text('Something went wrong'));
} else {
_widget =
Center(child: CircularProgressIndicator());
}
return _widget;
},
),
)
: Container(),
],
);
},
),
);
}
}
class MyModel with ChangeNotifier {
List<User> _users;
List<User> get users => _users;
set users(value) {
_users = value;
notifyListeners();
}
}
home_screen_list.dart
Это генератор списка, на планшете шириной 1/3 и справа - подробное изображение.
import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/drawer.dart';
import 'package:flut_bount/home_page.dart';
import 'package:flutter/material.dart';
class MyHomeScreenList extends StatefulWidget {
@override
_MyHomeScreenListState createState() => _MyHomeScreenListState();
}
class _MyHomeScreenListState extends State<MyHomeScreenList> {
Widget _widget;
Color _iconColor = Colors.black;
var data;
void _buildWidgets() {
Widget _temp = FutureBuilder(
future: DatabaseHelper.getUsers(),
builder: (BuildContext context, AsyncSnapshot<List<dynamic>> snapshot) {
Widget _widget;
if (snapshot.hasData) {
data = snapshot.data;
_widget = ListView.builder(
itemCount: data.length,
itemBuilder: (_, int index) {
return ListTile(
leading: Text(data[index].id.toString()),
title: Text(data[index].names),
subtitle: data[index].jobtitle != null
? Text(data[index].jobtitle)
: null,
onTap: () {
isLargeScreen
? pageController.animateToPage(index,
duration: Duration(seconds: 1), curve: Curves.easeOut)
: Navigator.push(
context,
MaterialPageRoute(
builder: (_) => DetailedView(data, index)));
},
);
},
);
} else if (snapshot.hasError) {
_widget = Center(child: Text('Something went wrong'));
} else {
_widget = Center(child: CircularProgressIndicator());
}
return _widget;
},
);
setState(() => _widget = _temp);
}
@override
void initState() {
super.initState();
initDb();
}
void initDb() async {
await DatabaseHelper.initDatabase();
_buildWidgets();
String name = DatabaseHelper.getTable();
print('table Name :$name');
Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
setState(() {
_iconColor = _temp;
});
}
changeTableName() async {
await DatabaseHelper.changeTable();
String name = DatabaseHelper.getTable();
print('table Name is :$name');
Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
setState(() {
_iconColor = _temp;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: MyDrawer(),
appBar: AppBar(
title: Text('My App'),
actions: <Widget>[
IconButton(
icon: Icon(Icons.language),
color: _iconColor,
onPressed: () {
setState(
() => _widget = Center(child: CircularProgressIndicator()));
Future.delayed(Duration(seconds: 1), () {
// _buildWidgets();
});
changeTableName();
_buildWidgets();
},
)
],
),
body: Container(
child: _widget,
),
);
}
}
detail_view.dart Здесь создается просмотр страницы, и вы хотели бы изменить язык, если щелкнул значок действия панели приложения listview
import 'package:flut_bount/home_page.dart';
import 'package:flutter/material.dart';
import 'package:flut_bount/user.dart';
import 'package:flutter_html/flutter_html.dart';
class DetailedView extends StatefulWidget {
final List<User> user;
final int index;
DetailedView(this.user, this.index);
@override
DetailedViewState createState() => DetailedViewState();
}
class DetailedViewState extends State<DetailedView>
with WidgetsBindingObserver {
int activePageIndex;
@override
void initState() {
super.initState();
pageController = PageController(initialPage: widget.index);
setState(() => activePageIndex = widget.index);
}
@override
Widget build(BuildContext context) => Scaffold(
// drawer: MyDrawer(),
appBar: AppBar(
title: Text('My App'),
actions: <Widget>[
IconButton(
onPressed: () {
if (widget.user[activePageIndex].favourite == 0 ||
widget.user[activePageIndex].favourite == null) {
setState(() => widget.user[activePageIndex].favourite = 1);
} else {
setState(() => widget.user[activePageIndex].favourite = 0);
}
},
icon: Icon(Icons.star),
color: widget.user[activePageIndex].favourite == 1
? Colors.yellow
: Colors.white,
)
],
),
body: PageView.builder(
controller: pageController,
itemCount: widget.user.length,
itemBuilder: (_, int index) =>
DetaildViewPage(user: widget.user[index]),
onPageChanged: (pageIndex) {
setState(() => activePageIndex = pageIndex);
},
),
);
}
class DetaildViewPage extends StatefulWidget {
final User user;
const DetaildViewPage({Key key, this.user}) : super(key: key);
@override
_DetaildViewPageState createState() => _DetaildViewPageState();
}
class _DetaildViewPageState extends State<DetaildViewPage> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView(
children: <Widget>[
Html(
data: widget.user.description,
),
],
),
),
);
}
}